110,538
社区成员
发帖
与我相关
我的任务
分享
Thread thrListener = null;
private void FormMain_Load(object sender, EventArgs e)
{
try
{
thrListener = new Thread(new ThreadStart(Listen));
thrListener.Start();
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
//监听数据
private void Listen()
{
try
{
IPEndPoint ip = new IPEndPoint(IPAddress.Any, int.Parse(rport.Text));
Socket listener = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
listener.Bind(ip);
//不断监听端口
while (true)
{
listener.Listen(10);
Socket socket = listener.Accept();
NetworkStream ntwStream = new NetworkStream(socket);
StreamReader strmReader = new StreamReader(ntwStream);
Invoke(new PrintRecvMssgDelegate(PrintRecvMssg),
new object[] { strmReader.ReadToEnd() });
//返回给客户端
byte[] sendByte = Encoding.UTF8.GetBytes("返回给客户端的信息");
socket.Send(sendByte, sendByte.Length, 0);
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//线程内向文本框txtRecvMssg中添加字符串及委托
private delegate void PrintRecvMssgDelegate(string s);
private void PrintRecvMssg(string info)
{
if (info == "")
{
return;
}
this.txtSendMssg.Text += "\r\n" + string.Format("[{0}]:{1}\r\n",
DateTime.Now.ToLongTimeString(), "监听到信息") + info;
}
private void button2_Click(object sender, EventArgs e)
{
try
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint ipe = new IPEndPoint(ip, int.Parse(28000));
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(ipe);
Byte[] bytSend = Encoding.UTF8.GetBytes("发送给服务端的信息");
clientSocket.Send(bytSend);
/////接收服务端返回的信息,去掉下面这一段就不卡死,加上去就卡死
byte[] byteReceive = null;
int count, size = 512;
byte[] data = new byte[size];
MemoryStream ms = new MemoryStream();
while (0 != (count = clientSocket.Receive(data, size, SocketFlags.None)))
ms.Write(data, 0, count);
byteReceive = ms.ToArray();
ms.Close();
//////
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}