天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 53|回复: 0

C语言编写Socket监听处理程序一例

[复制链接]
  • TA的每日心情
    开心
    2024-8-31 15:58
  • 签到天数: 89 天

    [LV.6]常住居民II

    488

    主题

    207

    回帖

    3366

    积分

    管理员

    积分
    3366
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    //C语言编写Socket监听处理程序一例
    //服务器端
    //--------------------------------------------------------------------------------------------
    #include <winsock2.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <tchar.h>
    #include <fstream>
    #include <iostream>
    #include <ole2.h>
    #include <conio.h>

    #pragma comment(lib,"WS2_32.lib")

    #define   MAX_PENDING_CONNECTS   4

    //声明函数
    void tt(void);
    DWORD WINAPI HandleSocket(LPVOID lpParam);

    //程序入口点
    int _tmain(int argc, _TCHAR* argv[])
    {       
             tt();          
             //stop screen method 1
             char q;
             cin>>q;
             //stop screen method 2
             //getchar();
            return 0;
    }

    //#include <winsock2.h>  //放在最顶端的.h中开头处
    //#include <stdio.h>
    //#include <stdlib.h>
    //#pragma comment(lib,"WS2_32.lib")
    void tt(void)
    {
         WORD wVersionRequested;
             WSADATA wsaData;
             int err;
             
             //版本请求
             wVersionRequested = MAKEWORD( 1, 1 );
             //初始化WinSock(WSAStartup函数)
             err = WSAStartup( wVersionRequested, &wsaData);
             if ( err != 0 )
             {  //初始化出错了退出函数
                    return;
             }
             //初始化成功!但版本不一致! 退出函数
             if ( LOBYTE( wsaData.wVersion ) != 1 ||
                            HIBYTE( wsaData.wVersion ) != 1 ) {
                      WSACleanup( ); //清除Socket
                      return;        //退出函数
             }
         //生成一个socket(sockSrv变量)
             //SOCK_STREAM  用于TCP协议
             //SOCK_DGRAM   用于UDP协议
             SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);  //使用TCP协议
             //设置一个地址Socket(addrSrv变量)
             SOCKADDR_IN addrSrv;
             addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.232"); //本机IP地址
             addrSrv.sin_family=AF_INET;
             addrSrv.sin_port=htons(6000);                 //端口6000
         //绑定函数(指定本地IP地址所使用的端口号时候使用)
             //(把sockSrv变量与addrSrv变量绑定在一起)
             bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

             //监听端口开始
             if(listen(sockSrv,MAX_PENDING_CONNECTS)!=0)
             {
                    printf("listen(sock)   failed:   %d\n ",::WSAGetLastError());
                    return;//ExitProcess(STATUS_FAILED);
             }
             printf("开始监听...");

             //接收来自客户端的请求连接
             SOCKET sockClient;
             SOCKADDR_IN addrClient;//定义一个客户端Socket地址         
             int len=sizeof(SOCKADDR);
             char recvBuf[100];
             int recv_len=-1;
             //
             sockaddr_in         acc_sin;
             int         acc_sin_len;
             acc_sin_len=sizeof(acc_sin);
             //
             while(true)
             {
                     //接收Socket请求   来自客户端的Connect
                     sockClient=accept(sockSrv,(struct sockaddr*)&acc_sin, &acc_sin_len);
                     if(sockClient>=0)   
                 {
                             //创建一个线程来处理socket请求threadHandle
                             DWORD id;   
                             HANDLE  threadHandle = CreateThread(0, 0,(LPTHREAD_START_ROUTINE)HandleSocket,(LPVOID)sockClient, 0, &id);
                         
                             接收数据并保存到recvBuf变量中
                             //recv_len=recv(sockClient,recvBuf,100,0);
                             recv_len=recvfrom(sockClient,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
                             //while(recv_len>=0)
                             //{
                                    // if (recv_len==0)
                                    // {
                                    //         printf("本次接收的没有数据,是响应客户端连接信息!\n ");
                                    // }
                                    // else
                                    // {
                                    //         //输出数据
                                    //         recvBuf[recv_len]='\0'; //在末尾加入字符串结束符号 '\0 '
                                    //         printf("%s\n",recvBuf);
                                    //         printf("本次数据接收结束。\n ");
                                    // }
                                    // recv_len=recv(sockClient,recvBuf,100,0);//recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
                             //}
                     }
                     else
                     { //没有客户端接入
                             printf("没有客户端接入2\n");
                     }
                     Sleep(200);
             }
             //关闭Socket变量sockSrv
             closesocket(sockSrv);
             //清除Socket
             WSACleanup();
    }


    DWORD WINAPI HandleSocket(LPVOID lpParam)
    {
            SOCKET sockClient=(SOCKET)lpParam;
       //接收数据并保存到recvBuf变量中
            char recvBuf[100];
             int recv_len=-1;
            while(1)
            {
                     recv_len=recv(sockClient,recvBuf,100,0);
                     //recv_len=recvfrom(sockClient,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
                     if(recv_len>=0)
                     {
                             if (recv_len==0)
                             {
                                     printf("本次接收的没有数据,是响应客户端连接信息!\n ");
                             }
                             else
                             {
                                     //输出数据
                                     recvBuf[recv_len]='\0'; //在末尾加入字符串结束符号 '\0 '
                                     printf("%s\n",recvBuf);
                                     printf("本次数据接收结束。\n ");
                             }
                             //recv_len=recv(sockClient,recvBuf,100,0);//recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
                     }
            }
    }

    //客户端
    //--------------------------------------------------------------------------------------------
    #pragma once
    #include <winsock2.h>
    #include <stdio.h>
    #include <stdlib.h>

    #include "targetver.h"
    #include <tchar.h>


    #include <fstream>
    #include <iostream>

    #include <ole2.h>
    #include <conio.h>

    using namespace std;

    #include "string.h"


    #pragma comment(lib,"WS2_32.lib")

    void SendMessage(void);
    int _tmain(int argc, _TCHAR* argv[])
    {
        SendMessage();
            char q;
             cin>>q;
            return 0;
    }

    void SendMessage(void)
    {
         WORD wVersionRequested;
             WSADATA wsaData;
             int err;
             
             //版本请求
             wVersionRequested = MAKEWORD( 1, 1 );
             //初始化WinSock(WSAStartup函数)
             err = WSAStartup( wVersionRequested, &wsaData);
             if ( err != 0 )
             {  //初始化出错了退出函数
                    return;
             }
             //初始化成功!但版本不一致! 退出函数
             if ( LOBYTE( wsaData.wVersion ) != 1 ||
                            HIBYTE( wsaData.wVersion ) != 1 ) {
                      WSACleanup( ); //清除Socket
                      return;        //退出函数
             }
         //生成一个socket(sockSrv变量)
             //SOCK_STREAM  用于TCP协议
             //SOCK_DGRAM   用于UDP协议
             SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);  //使用TCP协议
             //设置一个地址Socket(addrSrv变量)
             SOCKADDR_IN addrSrv;
             memset(&addrSrv,0,sizeof(addrSrv));
             addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.232");//要访问的IP地址
             addrSrv.sin_family=AF_INET;
             addrSrv.sin_port=htons(6000);                 //端口6000
         //绑定函数(指定本地IP地址所使用的端口号时候使用)
             //(把sockSrv变量与addrSrv变量绑定在一起)
             bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
             if(connect(sockSrv, (sockaddr*)&addrSrv,sizeof( addrSrv ) ) != SOCKET_ERROR )
             {
                     int i=0;
                     char strch[]={ "Client send OK!(from   Client) "};
                     while(true)
                     {
                             //strch[strlen(strch)]=i;
                             if(send(sockSrv,strch,strlen(strch),0)==SOCKET_ERROR)
                             {
                                    printf("WSAGetLastError:   %d\n ",WSAGetLastError());
                             }
                             else
                             {
                    printf(strch);printf("\n");
                             }
                             Sleep(300);
                     }
             }
             else
             {
                    printf("没连上!\n");
             }
         
             //关闭Socket变量sockSrv
             closesocket(sockSrv);
             //清除Socket
             WSACleanup();
             printf("已退出SendMessage函数!\n");
    }

    -----the----end-----

     

     

     

     

    C语言编写Socket监听处理程序一例
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池| |网站地图

    GMT+8, 2024-9-8 09:30 , Processed in 0.062298 second(s), 24 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表