1 #pragma comment(lib,"Ws2_32.lib") 2 #include <stdio.h> 3 #include <Winsock2.h> 4 SOCKET sockClient; 5 //设置接收数据和发送数据的缓存数组 6 char recvBuf[50]; 7 char sendBuf[50]; 8 SOCKADDR_IN addrClient; 9 DWORD WINAPI funB(LPVOID lp); 10 11 void main(){ 12 //要求使用的版本 13 WORD wVersionRequested; 14 // 15 WSADATA wsaData; 16 int err; 17 18 wVersionRequested = MAKEWORD(1,1); 19 //初始化WinSock dll库 WSAStartup 函数返回0表示初始化成功 20 err = WSAStartup(wVersionRequested,&wsaData); 21 //测试版本获取结果 22 //printf("%d ",err); 23 if(err!=0){ 24 printf("WinSock初始化失败 "); 25 return; 26 27 } 28 29 if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){ 30 WSACleanup(); 31 return; 32 } 33 printf("......客户端程序已启动...... "); 34 char addr[20]; 35 int port; 36 printf("请输入服务器的IP地址:"); 37 scanf("%s",addr); 38 printf("请输入服务器的端口号:"); 39 scanf("%d",&port); 40 //创建Socket套接字 41 sockClient = socket(AF_INET,SOCK_STREAM,0); 42 43 //通讯的IP地址 44 addrClient.sin_addr.S_un.S_addr=inet_addr(addr); 45 //使用IP地址族 46 addrClient.sin_family=AF_INET; 47 //通讯的端口号 48 addrClient.sin_port=htons(port); 49 50 connect(sockClient,(SOCKADDR*)&addrClient,sizeof(SOCKADDR)); 51 52 strcpy(recvBuf,""); 53 //从服务器中获得IP地址 并向服务器发送建立连接的消息 54 recv(sockClient,recvBuf,50,0); 55 send(sockClient,"已经建立通讯连接",strlen("已经建立通讯连接")+1,0); 56 57 if( strlen(recvBuf)==0){ 58 printf("警告:服务器未启动,请先启动服务器!!! "); 59 //system("pause"); 60 exit(0); 61 }else{ 62 printf("服务器信息:%s ",recvBuf); 63 } 64 65 HANDLE a; 66 DWORD dwT; 67 //参数1:使用默认的安全性;参数2:与调用线程一样的栈大小; 68 //参数3:线程入口函数地址;参数4:传递给线程的参数;参数5:线程创建标记;参数6:新线程的ID 69 a=CreateThread(NULL,0,funB,0,0,&dwT); 70 //循环接收和发送消息 71 //关闭新线程的句柄 72 CloseHandle(a); 73 74 while(1){ 75 //从控制台接收用户输入数据发送到客户端 76 //printf("客户端说:"); 77 scanf("%s",sendBuf); 78 send(sockClient,sendBuf,strlen(sendBuf)+1,0); 79 } 80 81 //关闭套接字和连接 82 closesocket(sockClient); 83 WSACleanup(); 84 85 } 86 87 DWORD WINAPI funB(LPVOID lp) 88 { 89 char Message[50]; 90 while (TRUE) 91 { 92 //从服务器接收数据显示到控制台 93 if(recv(sockClient,Message,50,0) != -1){ 94 printf("服务器说:%s ",Message); 95 }else{ 96 printf("连接已经中断.....请检查服务端是否启动并重试。"); 97 system("pause"); 98 exit(0); 99 } 100 } 101 return 0; 102 }