socket客户端问题

tanweish 2003-08-20 04:24:58
//声明接收返回内容的字符串
string recvStr="";
//声明字节数组,一次接收数据的长度为1024字节
byte[] recvBytes=new byte[1024];
//返回实际接收内容的字节数
int bytes=0;
//循环读取,直到接收完所有数据
bool loop=true;
while(loop)
{
bytes=socket.ReceiverecvBytes,recvBytes.Length,System.Net.Sockets.SocketFlags.Partial);
//读取完成后退出循环
if(bytes<=0)
loop=false;
//将读取的字节数转换为字符串
recvStr+=Encoding.ASCII.GetString(recvBytes,0,bytes);
Console.WriteLine(recvStr);
}

在读数据时,上面那段程序老是不能退出?
再,SOCKET能设定超时timeout的吗?
谢谢
...全文
40 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
张张好 2003-09-11
  • 打赏
  • 举报
回复
给你我的代码:
'从远程服务器接收数据时需要用到的状态对象:客户端套接字、用于接收数据的缓冲区、用于保存传入数据字符串的可变字符串
Public Class StateObject
Public workSocket As Socket = Nothing ' 客户端套接字
Public BufferSize As Integer = 256 ' 缓冲区大小.
Public buffer(256) As Byte ' 用于接收数据的缓冲区.
Public sb As New StringBuilder() '用于保存传入数据字符串的可变字符串
End Class
'接收
Private Shared Sub Receive(ByVal client As Socket)
Try
'状态对象实例化(SOCKET)
Dim state As New StateObject()
state.workSocket = client

'接收数据.
client.BeginReceive(state.buffer, 0, state.BufferSize, 0, AddressOf ReceiveCallback, state)
Catch e As Exception
MessageBox.Show(e.ToString(), "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Sub
'接收回调方法 ReceiveCallback 实现 AsyncCallback 委托。
'它接收来自网络设备的数据并生成消息字符串,将来自网络的一个或多个数据字节读入数据缓冲区,
'然后再次调用 BeginReceive 方法,直到客户端发送的数据完成为止。
'从客户端读取所有数据后,ReceiveCallback 通过设置 ManualResetEvent sendDone 向应用程序线程发出数据完成的信号。
Private Shared Sub ReceiveCallback(ByVal ar As IAsyncResult)
Try
'从状态对象获取当前套接字
Dim state As StateObject = CType(ar.AsyncState, StateObject)
Dim client As Socket = state.workSocket

'读取数据
Dim bytesRead As Integer = client.EndReceive(ar)

If bytesRead > 0 Then
' 存储已经接收到的数据.
state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, _
bytesRead))

' 得到剩余数据.
client.BeginReceive(state.buffer, 0, state.BufferSize, 0, _
AddressOf ReceiveCallback, state)
Else
' 所有数据都已收到后,将其写入可变字符串
If state.sb.Length > 1 Then
response = state.sb.ToString()
End If
' 将接收事件的状态设置为都已经接收
receiveDone.Set()
End If
Catch e As Exception
MessageBox.Show(e.ToString(), "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Sub
tanweish 2003-09-11
  • 打赏
  • 举报
回复
up

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧