关于套接字的发送与接收问题

时间:2022-12-21 10:10:44
我想在同一个TCP套接字下实现发送和接收的功能,发送功能一直在运行,但是接收功能我只想在另一台电脑发送数据后才接收,也就是当另一台电脑发出数据后,recv函数才启用,其他时候都不启用recv函数,这该怎么实现啊?谢谢

8 个解决方案

#1


if (socket.Poll(0, SelectMode.SelectRead))
{
}

#2


要是我用的是C语言,里面没有这个函数应该怎么办呢?

#3


程序怎么知道另一台电脑发送数据了没有呢,当然只能一直收了,
你的问题可能是收的时候没有数据会卡住,这是你的问题,得用线程,或者异步之类的方法。

#4


难道没有什么信号位可以表示在接收缓冲中有数据吗?

#5


Available属性或者DataAvailable属性。

你如何Receive信号位?Receive信号位置后立刻Receive数据对吧?Receive就是集成这两个功能的。

所以如果你阻塞在那里去看什么“信号位”,那么还不如仅写一个Receice语句。编程当然是越简单越好,只有那些抱着java书籍走火入魔的人才喜欢繁琐地去编程。

如果你不想阻塞和占用线程资源,如果你想让系统变得依赖倒置似地敏捷轻快,那么就使用 BeginReceive (或者 BeginRead),这就是系统已经写好的现成的灵敏响应“信号位”——仅在必要时才回调你的代码——的机制。

#6


异步方式!!!!

#7


Quote: 引用 5 楼 sp1234 的回复:

Available属性或者DataAvailable属性。

你如何Receive信号位?Receive信号位置后立刻Receive数据对吧?Receive就是集成这两个功能的。

所以如果你阻塞在那里去看什么“信号位”,那么还不如仅写一个Receice语句。编程当然是越简单越好,只有那些抱着java书籍走火入魔的人才喜欢繁琐地去编程。


但是如果我只能用标准的berkeley socket API来编程的话,没有beginread这个函数啊

#8


Available属性或者DataAvailable属性。

你如何Receive信号位?Receive信号位置后立刻Receive数据对吧?Receive就是集成这两个功能的。

#1


if (socket.Poll(0, SelectMode.SelectRead))
{
}

#2


要是我用的是C语言,里面没有这个函数应该怎么办呢?

#3


程序怎么知道另一台电脑发送数据了没有呢,当然只能一直收了,
你的问题可能是收的时候没有数据会卡住,这是你的问题,得用线程,或者异步之类的方法。

#4


难道没有什么信号位可以表示在接收缓冲中有数据吗?

#5


Available属性或者DataAvailable属性。

你如何Receive信号位?Receive信号位置后立刻Receive数据对吧?Receive就是集成这两个功能的。

所以如果你阻塞在那里去看什么“信号位”,那么还不如仅写一个Receice语句。编程当然是越简单越好,只有那些抱着java书籍走火入魔的人才喜欢繁琐地去编程。

如果你不想阻塞和占用线程资源,如果你想让系统变得依赖倒置似地敏捷轻快,那么就使用 BeginReceive (或者 BeginRead),这就是系统已经写好的现成的灵敏响应“信号位”——仅在必要时才回调你的代码——的机制。

#6


异步方式!!!!

#7


Quote: 引用 5 楼 sp1234 的回复:

Available属性或者DataAvailable属性。

你如何Receive信号位?Receive信号位置后立刻Receive数据对吧?Receive就是集成这两个功能的。

所以如果你阻塞在那里去看什么“信号位”,那么还不如仅写一个Receice语句。编程当然是越简单越好,只有那些抱着java书籍走火入魔的人才喜欢繁琐地去编程。


但是如果我只能用标准的berkeley socket API来编程的话,没有beginread这个函数啊

#8


Available属性或者DataAvailable属性。

你如何Receive信号位?Receive信号位置后立刻Receive数据对吧?Receive就是集成这两个功能的。