TCP Client

来源:互联网 发布:游戏编程需要学什么 编辑:程序博客网 时间:2024/05/22 17:05
#include <stdio.h>#include <string.h>#include <winsock2.h>#pragma comment(lib,"Ws2_32.lib")#define BUFFER_SIZE 50DWORD WINAPI RecvThread(LPVOID lpParam){printf("start to Recv\n");LPSTR lpRecv = (LPSTR)HeapAlloc(GetProcessHeap(), 0, BUFFER_SIZE);SOCKET sock = (SOCKET)lpParam;int nRecv = 0;BOOL bRead = TRUE;while(bRead){while(1){nRecv = recv(sock, lpRecv, BUFFER_SIZE, 0);if (nRecv==BUFFER_SIZE){printf("%s", lpRecv);}else if (nRecv<BUFFER_SIZE && nRecv>0){printf("%s\n", lpRecv);break;}else if(nRecv==0){printf("\nReceive Over.");break;}else{int error = WSAGetLastError();switch(error){case WSAECONNRESET:printf("\nerror:%d, %s\n", GetLastError(), "socket is closed at remote");break;case WSAECONNABORTED:printf("\nerror:%d, %s\n", GetLastError(), "socket is closed at local");break;}closesocket(sock);bRead = FALSE;break;}}}HeapFree(GetProcessHeap(),0,lpRecv);closesocket(sock);return 0;}DWORD WINAPI SendThread(LPVOID lpParam){printf("start to send\n");SOCKET sock = (SOCKET)lpParam;char buf[1024] = {0};while(1){printf("Client Input:");scanf("%s", buf);if (send(sock, buf, sizeof(buf), 0)!=sizeof(buf)){printf("send error: %d\n", WSAGetLastError());break;}}closesocket(sock);return 0;}int main(){HANDLE child[2];int err;SOCKET sClient;char ip[20] = "127.0.0.1";    /*IP地址*/char buf[BUFFER_SIZE];    /*数据发送缓冲区*/int port = 10000;    /*端口*/WSADATA wsaD;struct sockaddr_in servaddr;/*存放服务器端网络地址的结构*///printf("Please input target IP and Port(eg:127.0.0.1 5555):/n");//scanf("%s%hu",ip,&port);memset(&servaddr,0,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = inet_addr(ip);servaddr.sin_port = htons(port);/*Winsock初始化*/err = WSAStartup(MAKEWORD(1,1),&wsaD);/*创建Socket*/if((sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == SOCKET_ERROR){err = WSAGetLastError();printf("Create socket error %d",err);return -1;}/*连接到服务器*/if(connect(sClient,(struct sockaddr *) &servaddr,sizeof(servaddr)) == SOCKET_ERROR){err = WSAGetLastError();printf("Failed to connect to server!%d\n",err);return -1;}printf("Connected to server %s\n",inet_ntoa(servaddr.sin_addr));//////////////////////////////////////////////////////////////////////////child[0]=CreateThread(NULL, 0, RecvThread, (LPVOID)sClient, 0, NULL);if (!child[0] ){printf("Create  recv thread error: %d\n", WSAGetLastError());}if (! ( child[1]=CreateThread(NULL,  0,  SendThread,  (LPVOID)sClient,  0,  NULL) ) ){printf("Create  send thread error: %d\n", WSAGetLastError());}//////////////////////////////////////////////////////////////////////////// while(1)// {// gets(buf);// if (strcmp(buf,"quit")==0 || strcmp(buf,"exit")==0)// break;// send(sClient,buf,strlen(buf)+1,0) ;/*发送数据*/// }//WaitForSingleObject(child[0], INFINITE);WaitForMultipleObjects(2, child, TRUE, INFINITE);closesocket(sClient);WSACleanup();return 0;}

原创粉丝点击