当前位置: 技术问答>linux和unix
Linux socket 同时收发
来源: 互联网 发布时间:2017-03-28
本文导语: 客户端一直向服务器发数据,但是服务器可能偶尔发数据给客户点,能不能用一个套接字描述符实现呢?当在两个线程中分别完成数据的接收与发送时,send()和recv()会不会相互影响? | 应该没...
客户端一直向服务器发数据,但是服务器可能偶尔发数据给客户点,能不能用一个套接字描述符实现呢?当在两个线程中分别完成数据的接收与发送时,send()和recv()会不会相互影响?
|
应该没有,简单的局域网聊天软件,客服端用的是一个fd。服务器接收都是一个fd,但发送用的是accept得到的fd(TCP);
|
这个需要你客户端自己来控制,比如当recv服务器的某个命令才会send特定的数据,而不是同时send和recv
|
一个套接字描述符是可以的,两个线程之间需要对同步进行控制,防止接到到一半就发送了
|
控制好灵界资源应该没事的
|
一个socket 描述符,对应send 和 recv 使用的栈是相互独立的,可以一个线程专门接收,一个线程专门发送,这种模式下可以不用考虑同步的问题;但是要注意,如在两个线程对一个socket描述符同时接受或同时发送时,就需要考虑同步的问题。
|
当然会有影响,楼主自己都说了,针对同一个socket。
如果你对socket进行写操作,紧接着去读,就会把你写进去的message给读出来,我之前有写过这样的程序,遇见过这样的问题。
后来改了思路,就是无论服务器还是客户端都有两个线程,分别实现客户端属性和服务器属性。在服务器程序中,发送和接收是针对两个socket来进行的,这样更像双工通信,随时可以惊醒发送和接收!
如果你对socket进行写操作,紧接着去读,就会把你写进去的message给读出来,我之前有写过这样的程序,遇见过这样的问题。
后来改了思路,就是无论服务器还是客户端都有两个线程,分别实现客户端属性和服务器属性。在服务器程序中,发送和接收是针对两个socket来进行的,这样更像双工通信,随时可以惊醒发送和接收!
|
理论上二个线程同时分别进行收发是没有问题的
发送和接收是二个缓冲区
OS应该也提供一些资源的互斥的访问
发送和接收是二个缓冲区
OS应该也提供一些资源的互斥的访问
|
楼主需要学习使用I/O复用技术, 否则网络开发寸步难行。
|
有A , B俩个线程,A线程每隔30秒给B线程发送时间到了的通知,B线程收到通知后作出响应并打印通知。
|
甲采用select多路监听的方式来监听乙丙即可。
不明白你的意思: 甲售价文件信息并保存在文件中,这个文件乙丙会访问吗? 要是不会,就无需采用同步。