基于Udp的Socket网络编程聊天程序

1.新建一个工程区Net

在工作区中添加两个工程 NetSrv 和 NetClient

为两个工程添加库文件 (Link中) ws2_32.lib

2.在工程NetSrv中添加Server.cpp文件

代码如下:

01#include <WINSOCK2.H>
02#include <stdio.h>
03  
04void main()
05{
06    WORDwVersionRequested;
07    WSADATA wsaData;
08    interr;
09      
10    wVersionRequested = MAKEWORD( 2, 2 );
11      
12    err = WSAStartup( wVersionRequested, &wsaData );
13    if( err != 0 )
14    {
15        return;
16    }
17      
18    if( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) 
19    {
20        WSACleanup( );
21        return
22    }
23      
24    SOCKET sockSrv = socket(AF_INET,SOCK_DGRAM,0);
25    SOCKADDR_IN addrSrv;
26    addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
27    addrSrv.sin_family = AF_INET;
28    addrSrv.sin_port = htons(6000);
29  
30    bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
31  
32    charrecvBuf[100];
33    charsendBuf[100];
34    chartempBuf[200];
35  
36    SOCKADDR_IN addrClient;
37    intlen =sizeof(SOCKADDR);
38  
39    while(1)
40    {
41        recvfrom(sockSrv , recvBuf, 100, 0, (SOCKADDR*)&addrClient,&len);
42        if('q'==recvBuf[0])
43        {
44            sendto(sockSrv,"q",strlen("q")+1, 0 , (SOCKADDR*)&addrClient,len);
45            printf("Chat end!\n");
46            break;
47        }
48        sprintf(tempBuf,"%s say : %s",inet_ntoa(addrClient.sin_addr),recvBuf);
49        printf("%s\n",tempBuf);
50        printf("Please input data:\n");
51        gets(sendBuf);
52        sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len);
53    }
54    closesocket(sockSrv);
55    WSACleanup();
56}

3.在工程NetClient中添加Client.cpp文件 代码如下:

01#include <WINSOCK2.H>
02#include <stdio.h>
03  
04void main()
05{
06    WORDwVersionRequested;
07    WSADATA wsaData;
08    interr;
09      
10    wVersionRequested = MAKEWORD( 2, 2 );
11      
12    err = WSAStartup( wVersionRequested, &wsaData );
13    if( err != 0 )
14    {
15        return;
16    }
17      
18    if( LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 2 ) 
19    {
20        WSACleanup();
21        return
22    }
23  
24    SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0);
25      
26    SOCKADDR_IN addrSrv;
27    addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
28    addrSrv.sin_family=AF_INET;
29    addrSrv.sin_port = htons(6000);
30  
31    charrecvBuf[100];
32    charsendBuf[100];
33    chartempBuf[200];
34  
35    intlen =sizeof(SOCKADDR);
36  
37    while(1)
38    {
39        printf("Please input data:\n");
40        gets(sendBuf);
41        sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len);
42        recvfrom(sockClient,recvBuf,100,0,(SOCKADDR*)&addrSrv,&len);
43        if('q'== recvBuf[0])
44        {
45            sendto(sockClient,"q",strlen("q")+1,0,(SOCKADDR*)&addrSrv,len);
46            printf("Chat end!\n");
47            break;
48        }
49        sprintf(tempBuf,"%s say : %s",inet_ntoa(addrSrv.sin_addr),recvBuf);
50        printf("%s\n",tempBuf);
51    }
52    closesocket(sockClient);
53    WSACleanup();
54}

4.先运行服务端程序,再运行客户端程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值