读书人

c#网络通信有关问题 服务器只能接收一

发布时间: 2013-03-14 10:33:15 作者: rapoo

c#网络通信问题 服务器只能接收一次信息
服务器代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;

namespace receive
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Thread thread = new Thread(new ThreadStart(SocketListen));
thread.Start();
IPAddress ipAddress = IPAddress.Any;
}
protected delegate void UpdateDisplayDelegate(string text);
public void SocketListen()
{
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(new IPEndPoint(IPAddress.Any, 9999));
listener.Listen(10);
Socket s = listener.Accept();
while (true)
{
Stream netStream = new NetworkStream(s);
StreamReader reader = new StreamReader(netStream);
string result = reader.ReadToEnd();
Invoke(new UpdateDisplayDelegate(UpdateDisplay), new object[] { result });
}
}
public void UpdateDisplay(string text)
{
textBox1.Text += text;
}
}
}
客户端代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace send
{
public partial class Form1 : Form
{
public Form1()


{
InitializeComponent();
}
TcpClient tc;
private void button1_Click(object sender, EventArgs e)
{

NetworkStream ns = tc.GetStream();
if (ns.CanWrite)
{
Byte[] sendbytes = Encoding.ASCII.GetBytes(textBox3.Text);
ns.Write(sendbytes, 0, sendbytes.Length);
ns.Close();
tc.Close();
}
else
{
MessageBox.Show("不能写入数据流", "终止", MessageBoxButtons.OK, MessageBoxIcon.Stop);
ns.Close();
tc.Close();
}
}

private void button2_Click(object sender, EventArgs e)
{
tc= new TcpClient(textBox1.Text, Convert.ToInt32(textBox2.Text));
}
}
}
为什么服务器只能接收一次信息?求大神们帮忙
[解决办法]
参考一下这个
[解决办法]
while (true)
{
Socket s = listener.Accept();
Stream netStream = new NetworkStream(s);
StreamReader reader = new StreamReader(netStream);
string result = reader.ReadToEnd();
Invoke(new UpdateDisplayDelegate(UpdateDisplay), new object[] { result });
}

读书人网 >C#

热点推荐