TCP Socket

    技术2026-05-19  7

                                                                   Tcp socket 收发数据流程图

    服务器端代码:

    WORD wVersionRequested; WSADATA wsaData; int err; char recvbuffer[100],recvdata[100]; //time_t time_start,time_end;

     cout<<"This is server!"<<endl;

     wVersionRequested=MAKEWORD(1,1); err=WSAStartup(wVersionRequested,&wsaData); if(err!=0) {  return; }

     if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1) {  //终止对WINSOCKET库的使用  WSACleanup();  return; }

     //addrServer代表服务器端地址和端口 SOCKADDR_IN addrServer; addrServer.sin_family=AF_INET; addrServer.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrServer.sin_port=htons(SERVER_PORT); //创建Socket int sockServer=socket(AF_INET,SOCK_STREAM,0); if(sockServer<0) {  cout<<"Socket created failed."<<endl;  return; }  if(bind(sockServer,(struct sockaddr*)&addrServer,sizeof(addrServer))<0) {  cout<<"Bind failed"<<endl;  return ; }

     if(listen(sockServer,5)<0) {  cout<<"Listen failed"<<endl;  return ;  }

     SOCKADDR_IN addrClient; int length = sizeof(addrClient); int new_socket = accept(sockServer,(struct sockaddr*)&addrClient,&length);  //get remote port  int remotePort = ntohs(addrClient.sin_port); //get remote address char* remoteAddress = inet_ntoa(addrClient.sin_addr);

     cout<<"remote port is:"<<remotePort<<endl; cout<<"remoteAddress is:"<<remoteAddress<<endl;  if(new_socket<0) {  cout<<"Accept failed!"<<endl;  return; }

     memset(recvbuffer,0,sizeof(recvbuffer)); memset(recvdata,0,sizeof(recvdata)); memcpy(recvbuffer,"Hello!",100); //发送数据 int leng = send(new_socket,(const char*)recvbuffer,DATA_LEN,0);

     int len = recv(new_socket, (char *)recvdata, DATA_LEN, 0);  cout<<"Recieve data :"<<recvdata<<endl;

     if( len < 0) {  cout<<"receive data failed!"<<endl;  return; }

     closesocket(new_socket); closesocket(sockServer);

    WSACleanup();

    //

    //客户端代码

    WORD wVersionRequested; WSADATA wsaData; int err; char recvbuffer[100],recvdata[100]; //select监视的可读文件句柄集合 //fd_set readfd; //time_t time_start,time_end;

     cout<<"This is client!"<<endl;

     wVersionRequested=MAKEWORD(1,1); err=WSAStartup(wVersionRequested,&wsaData); if(err!=0) {  return; }

     if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1) {  //终止对WINSOCKET库的使用  WSACleanup();  return; }

     //addrClient代表客户端地址和端口 SOCKADDR_IN addrClient; addrClient.sin_family=AF_INET; addrClient.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

     addrClient.sin_port=htons(0); //创建TCPSocket int sockClient = socket(AF_INET,SOCK_STREAM,0); if(sockClient<0) {  cout<<"Socket created failed."<<endl;  return; }  if(bind(sockClient,(struct sockaddr*)&addrClient,sizeof(addrClient))<0) {  cout<<"Bind failed"<<endl;  return ; }  SOCKADDR_IN  addrServer; addrServer.sin_family=AF_INET; addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//服务器端IP地址 addrServer.sin_port=htons(5000);//服务器端监听端口

     if(connect(sockClient,(struct sockaddr*)&addrServer,sizeof(addrServer))<0) {  //connect error   return ; }

     memset(recvbuffer,0,sizeof(recvbuffer)); memset(recvdata,0,sizeof(recvdata));

     int len = recv(sockClient, (char *)recvdata, DATA_LEN, 0);

     cout<<"Recieve data :"<<recvdata<<endl;

     if( len < 0) {  cout<<"receive data failed!"<<endl;  return; }

     memcpy(recvbuffer,"OK!",100); //发送数据 int leng = send(sockClient,(const char*)recvbuffer,DATA_LEN,0); cout<<"Send Ok to server: "<<recvbuffer<<endl;

    WSACleanup();

     

    最新回复(0)