C语言Socket服务器怎么给客户端发消息

C语言Socket服务器怎么给客户端发消息,第1张

你的文件中的问题

// 会阻塞进程,直到有客户端连接上来为止

// 既然是直到有客户端连接上,那么就要弄明白哪个是与客户端连接的套接字

// sockClient就是与客户端连接的套接字

sockClient = accept(sockServer, (SOCKADDR*)&addrClient, &len)

//接收并打印客户端数据

recv(sockClient, recvBuf, 100, 0)

printf("%s\n", recvBuf)

// 所以此处,应该把sockServer改为sockClient

send(/*sockServer*/sockClient, sendBuf, 100, 0)

PS:服务器客户端通信,是要保持服务器与客户端的连接。

而不能这样立即关闭,如果设置不对,立即关闭,缓冲区的数据是会丢失的。那客户端也就不会再收到数据了。

你可以加Sleep(10000)来测是通信过程

//关闭socket

closesocket(sockClient)

网络之间的数据传递 都可以认为是数据流的传递。具体什么意思呢?所谓协议,说白了 你就是发送一个结构体过去。你定义如下结构体

//定义包头

struct PacketHeader{

int uLen//包长

int uOpCode//协议号(项目实战中常规做法。)

}

//定义一个协议。传输 int 变量的值过去。

struct Protrol{

PacketHeader head//协议头

int nBody //协议身体,就是我们要传的值。

}

然后发送的时候这么发送:

Protrol a

a.nBody = 1

a.uLen = sizeof(Protrol )

SendBuffer((const char*)&a,a.uLen)

接收端也是如此,根据Opcode的值,将收到的数据流强制类型转换成Protrol的指针就可以了。

比如收到的buff是:const char szBuff[1024]={0}

const Protrol* pMsg = (const Protrol*)szBuff

这样就可以了。pMsg ->nBody 就是你要的值。

现阶段 你学习到这个程度就够了,以后你就会发现一些问题,比如内存对齐 比如O2优化的问题。

尽管如此 这也是一个常用方法,或许你们教科书就是这么写的。这种方式非常简单。就这样。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/318249.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存