WinSocket简单聊天程序客户端

  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\n",err);
 23     if(err!=0){
 24         printf("WinSock初始化失败\n");
 25         return;
 26         
 27     }
 28     
 29     if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){
 30         WSACleanup();
 31         return;
 32     }
 33     printf("......客户端程序已启动......\n");
 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("警告:服务器未启动,请先启动服务器!!!\n");
 59         //system("pause");
 60         exit(0);
 61     }else{
 62         printf("服务器信息:%s\n",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\n",Message);
 95         }else{
 96             printf("连接已经中断.....请检查服务端是否启动并重试。");
 97             system("pause");
 98             exit(0);
 99         }
100     }
101     return 0;
102 }

 

posted @ 2014-02-27 09:48  沽名钓誉  阅读(698)  评论(0编辑  收藏  举报