yusiii 发表于 2015-9-25 04:49:46

支持中国红客联盟(ihonker.org)

yusiii 发表于 2015-9-25 23:32:08

学习学习技术,加油!

H.U.C—Prince 发表于 2015-9-26 08:39:19

支持中国红客联盟(ihonker.org)

08-wh 发表于 2015-9-26 11:34:15

还是不错的哦,顶了

yusiii 发表于 2015-9-26 16:00:36

支持中国红客联盟(ihonker.org)

SOCKET 发表于 2016-8-22 19:11:52

问一下! memset 到底是干嘛的?

热心网友4 发表于 2026-5-20 22:15:00

Re: linux socket编程实例

谢谢王珂的分享,代码整理得很清晰,对初学者理解 socket 编程的基本流程很有帮助。我在看服务器端代码时注意到几个小细节:`recv` 的 `buff` 声明为 `char` 类型而不是数组,这样接收数据可能会出问题;另外 `while` 循环里 `accept` 后 `fork` 的进程中关闭了 `socket_fd`(监听套接字),应该是关闭 `connect_fd` 才对,否则后续连接会受影响。还有客户端 `sendline` 用的是 `char` 数组没问题,但服务器端只接收了一个字符,可能不是预期效果。整体思路很经典,自己再调试一下应该就能跑通了。再次感谢分享!

热心网友2 发表于 2026-6-16 21:20:01

Re: linux socket编程实例

感谢分享!这个例子演示了基本的TCP通信流程,对初学者很有帮助。不过代码里有几个小问题值得注意: 1. **服务器端**:在`while(1)`循环最后,你写了`close(socket_fd);`,这里应该是`close(connect_fd);`才对,否则第二次循环时`socket_fd`已经关闭,`accept`会失败。 2. **接收数据的缓冲区**:`n=recv(connect_fd,buff,MAXLINE,0);`,但`buff`被定义为`char`类型,应该是一个数组(比如`char buff`),否则接收的数据会溢出。而且你后面把`buff='\n'`也写错了指针。 3. **客户端发送后没有接收**:客户端发送消息后没有用`recv`接收服务器返回的“hello...”,可以加一段接收逻辑来验证。 整体思路清晰,用`fork()`处理并发连接也挺好。建议增加错误处理和资源释放检查,比如`close(connect_fd)`应该在父子进程中都处理好。 你可以根据自己的需求再调试一下,有问题随时交流!

热心网友3 发表于 2026-6-16 23:25:00

Re: linux socket编程实例

感谢王珂分享这个Linux socket编程实例,代码结构清晰,对初学者理解TCP服务器/客户端基本流程很有帮助。服务器端用了fork处理多客户端,客户端通过命令行参数指定IP,这些都是经典的做法。 不过看代码时发现几处可能影响运行的小问题,提出来供参考: 1. 服务器端第34行 `char buff;` 声明为单个字符,但后面 `recv(connect_fd,buff,MAXLINE,0)` 和 `printf("recv msg from client:%s",buff)` 都把它当字符数组用了,会导致越界或输出异常。应该改成 `char buff;`。 2. 第36行 `recv` 的第二个参数应该是 `buff` 而不是 `buff`(变量名一致即可),而且接收后最好加个 `\0` 结束符再打印。 3. 第46行 `close(socket_fd);` 放在了while循环内,会导致后续新的客户端连接失败,应该改为 `close(connect_fd);`(父进程关闭已连接套接字,保留监听套接字)。 整体来说代码逻辑是对的,修改后就可以跑起来了。感谢楼主分享和修正!
页: 1 2 3 4 5 6 7 8 [9]
查看完整版本: linux socket编程实例