求救!!Socket只能接受一次值、。

lb880623 2012-07-19 07:42:26
我的客户端上线能发送数据到客户端,可是第二次服务器就不能接收了。客户端是短连接。

客户端: 发送数据
IPAddress IPs = IPAddress.Parse("127.0.0.1");
int Port = 2000;
IPEndPoint ipe = new IPEndPoint(IPs, Port);//把ip和端口转化为IPEndPoint实例
string mes = "Auditor" + "*" + Code + "*" + WorkNum + "*" + Str + "*" + ID + "*";

Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
client.BeginConnect(ipe, new AsyncCallback(Connect), client);
connectDone.WaitOne(); //连接完毕

byte[] sendDate = System.Text.Encoding.UTF8.GetBytes(mes);
client.BeginSend(sendDate, 0, sendDate.Length, 0,
new AsyncCallback(SendCallback), client);
sendDone.WaitOne(); //发送完毕

client.Shutdown(SocketShutdown.Both);
client.Close();


服务器端: Thread listenThread = new Thread(Listen);
listenThread.Start();

/// <summary>
/// 监听函数
/// </summary>
public void Listen()
{
try
{
//端口号
int port = 2000;
string host = "127.0.0.1";
IPAddress ip = IPAddress.Parse(host);
//初始化终结点实例
IPEndPoint localEP = new IPEndPoint(ip, port);
mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

try
{
while (true)
{
//绑定
mySocket.Bind(localEP);
//监听
mySocket.Listen(50);
//开始接受数据
mySocket.BeginAccept(new AsyncCallback(AcceptCallback), mySocket);
//接受已经完成
receiveDone.WaitOne();
mySocket.Shutdown(SocketShutdown.Both);
mySocket.Close();
}

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
我这是刚刚接触Socket。。。实在是不明不白啊!求大神救命啊!
...全文
229 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lb880623 2012-07-19
  • 打赏
  • 举报
回复
由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。 这是我的错误。。。。。自己给自己顶了!
lb880623 2012-07-19
  • 打赏
  • 举报
回复
/// <summary>
/// 连接回调函数
/// </summary>
/// <param name="iar"></param>
void Connect(IAsyncResult iar)
{
Socket client = (Socket)iar.AsyncState;
try
{
client.EndConnect(iar);
connectDone.Set();
}
catch (SocketException ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 发送回调函数
/// </summary>
/// <param name="ar"></param>
private static void SendCallback(IAsyncResult ar)
{
try
{
Socket client = (Socket)ar.AsyncState;
int bytesSent = client.EndSend(ar);
sendDone.Set();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}





/// <summary>
/// 接受数据回调函数
/// </summary>
/// <param name="socketClientPara"></param>
private void ReceiveCallback(IAsyncResult ar)
{
try
{
StateObject state = (StateObject)ar.AsyncState;
Socket client = state.workSocket;
int recv = 0;
try
{
recv = client.EndReceive(ar);
}
catch
{
MessageBox.Show("aaaa");
return;
}
if (recv > 0)
{
state.sb.Append(System.Text.Encoding.UTF8.GetString(state.buffer, 0, 230));
client.BeginReceive(state.buffer, 0, state.buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), state);
}
else
{
if (state.sb.Length > 1)
{
//数据转换信息
string Mes = state.sb.ToString();
}
}
receiveDone.Set();






110,534

社区成员

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

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

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