zoukankan      html  css  js  c++  java
  • WinSocket聊天程序实例(多线程)

     1 #pragma comment(lib,"Ws2_32.lib") 
     2 #include <stdio.h>
     3 #include <Winsock2.h>
     4 SOCKET sockSrv;//连接所用套节字 
     5 SOCKET sockConn; //监听套接字
     6 SOCKADDR_IN addrSrv;
     7 DWORD WINAPI funA(LPVOID lp);
     8 //定义发送和接收的缓存数组
     9 char sendBuf[50];
    10 char recvBuf[50];
    11 
    12 void main(){
    13     //要求使用的版本
    14     WORD wVersionRequested;
    15     //
    16     WSADATA wsaData;
    17     int err;
    18     
    19     wVersionRequested = MAKEWORD(1,1);
    20     //初始化WinSock dll库 WSAStartup 函数返回0表示初始化成功
    21     err = WSAStartup(wVersionRequested,&wsaData);
    22     //测试版本获取结果
    23     //printf("%d
    ",err);
    24     if(err!=0){
    25         printf("WinSock初始化失败
    ");
    26         return;
    27         
    28     }
    29     
    30     if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){
    31         WSACleanup();
    32         return;
    33     }
    34     printf("服务器已启动......
    ");
    35     
    36     //创建Socket套接字
    37     sockSrv = socket(AF_INET,SOCK_STREAM,0);
    38     //通讯的IP地址 htonl把主机字节转换成网络字节
    39     addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
    40     //使用IP地址族
    41     addrSrv.sin_family=AF_INET;
    42     //通讯的端口号
    43     addrSrv.sin_port=htons(8888);
    44     //函数绑定 将套接字与通讯地址建立联系
    45     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
    46     //建立监听队列(把套接字转换成监听模式)
    47     listen(sockSrv,5);
    48     int len=sizeof(SOCKADDR);
    49 
    50     //accept接受客户请求
    51     sockConn = accept(sockSrv,(SOCKADDR*)&addrSrv,&len);
    52     
    53     sprintf(sendBuf,"服务器IP: %s ;连接成功!",inet_ntoa(addrSrv.sin_addr));
    54     //发送消息
    55     send(sockConn,sendBuf,strlen(sendBuf)+1,0);    
    56     
    57     HANDLE a; 
    58     DWORD dwT; 
    59     
    60     //参数1:使用默认的安全性;参数2:与调用线程一样的栈大小;
    61     //参数3:线程入口函数地址;参数4:传递给线程的参数;参数5:线程创建标记;参数6:新线程的ID
    62     a=CreateThread(NULL,0,funA,0,0,&dwT); 
    63     CloseHandle(a);
    64     
    65     //消息循环接收和发送
    66     while(1){
    67         //从控制台接收用户输入
    68         //printf("服务器说:");
    69         scanf("%s",sendBuf);
    70         //发送消息到客户端
    71         send(sockConn,sendBuf,strlen(sendBuf)+1,0);
    72     }
    73     closesocket(sockConn);
    74     //关闭连接和套接字
    75     WSACleanup();
    76 }
    77 
    78 DWORD WINAPI funA(LPVOID lp) 
    79 {    
    80     while(1){
    81         //从服务器接收数据显示到控制台
    82         if(recv(sockConn,recvBuf,50,0) != -1){
    83             printf("客户端说:%s
    ",recvBuf);
    84         }else{
    85             printf("连接已经中断.....请检查客户端是否连接并重试。");
    86             system("pause");
    87             exit(0);
    88         }
    89     }
    90     return 0;
    91 } 
  • 相关阅读:
    Event事件的兼容性
    学会使用Google代码搜索
    event.srcElement怎么取得tr的title值及怎么利用样式编辑blogs
    Mac下MyEclipse配置Tomcat的方法
    Mac 下配置Tomcat7
    myEclipse导入现成项目出现错误
    Android——padding/margin/layout_alignParentRight详解
    Mac系统下Eclipse安装前端开发各类插件
    MyEclipse导入现成项目后报Target runtime Apache Tomcat v6.0 is not defined. 错误的解决办法
    Mac下配置PHP+MySql环境
  • 原文地址:https://www.cnblogs.com/rememberme/p/WinSocket.html
Copyright © 2011-2022 走看看