用c语言做一个聊天软件,MFC用CSocket写简易聊天软件

CSocket通信原理:TCP/IP

服务器端

1.创建一个socket套接字(用于监听)

2.获取服务器IP(本地IP)IP和端口端口(大于1024的端口)

3.开始监听

4.监听到有客户端连接服务器之后,创建一个新的socket套接字(用于通讯),用于和客户端之间的通信(继续监听)

5.用新的socket套接字和客户端进行通信

6.send();//发送消息

Receive();//接收消息

创建->绑定端口->监听->创建通信的socket->通信->关闭服务器

|

监听

客户端

1.创建一个socket套接字

2.根据服务器的IP地址和通信端口连接服务器

3.通过已经创建的socket套接字和客户端进行通信

4.send();//发送消息

Receive();//接收消息

5.关闭客户端 close();

创建->连接服务器->通信->关闭

UDP型套接字

服务器端(接收端)程序:

1、创建套接字(socket)。

2、将套接字绑定到一个本地地址和端口上(bind)。

3、等待接收数据(recvfrom)。

4、关闭套接字。 客户端(发送端)程序:

1、创建套接字(socket)。

2、向服务器发送数据(sendto)。

3、关闭套接字。

服务器端代码:

#include #include void main()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );

if ( err != 0 ) { return; }

if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )

{

WSACleanup( );

return;

}

SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(6000);

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

SOCKADDR_IN addrClient;

int len=sizeof(SOCKADDR);

char recvBuf[100];

recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);

printf(“%sn”,recvBuf);

closesocket(sockSrv); WSACleanup();

}

客户端代码:

#include #include #include #pragma comment(lib,”WS2_32.lib”)

void main()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD(1, 1);

err = WSAStartup(wVersionRequested, &wsaData);

if (err != 0) { return; }

if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)

{

WSACleanup();

return;

}

SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);

SOCKADDR_IN addrSrv;

InetPton(AF_INET,”127.0.0.1″, (void *)&addrSrv.sin_addr.S_un.S_addr);

addrSrv.sin_family = AF_INET;

addrSrv.sin_port = htons(6000);

sendto(sockClient, “Hello”, strlen(“Hello”) + 1, 0, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

closesocket(sockClient);

WSACleanup();

}

q1:无法解析的外部符

a1:在include后加一行#pragma comment(lib,“WS2_32.lib”)

q2:error C4996: ‘inet_addr’

a2:1.项目->属性->C/C+±>常规->SDL检查,将“是”改为“否”

2.使用新函数InetPton()(客户端里面有使用实例)

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览115979 人正在系统学习中 相关资源:awesome-jekyll-plugins:很棒的Jekyll插件集合(宝石,脚本,馅饼等…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月15日
下一篇 2021年4月15日

相关推荐