客户端 private void button2_Click(object sender, EventArgs e)
{
Connect(); //这里我第一次点击后能从服务器获得数据,第二次及以后就异常了 为什么?
//高手解答
}
private void Connect()
{
try
{
string ServerIp = "127.0.0.1";//服务器地址
int ServerPort = 1000;//服务器端口号
TcpClient TC = new TcpClient();
TC.Connect(ServerIp, ServerPort);//建立与服务器的连接
NetworkStream stm = TC.GetStream();//通过tcp
UTF8Encoding UTF8 = new UTF8Encoding();
byte[] str = UTF8.GetBytes(this.textBox1.Text);//把输入的内容编码
stm.Write(str, 0, str.Length);//向服务器发送信息 byte[] bb = new byte[10240];//接收服务器返回的数据
int k = stm.Read(bb, 0, 10240);
string RevStr = string.Empty;
RevStr = System.Text.UTF8Encoding.UTF8.GetString(bb, 0, k);//转换
this.textBox2.Text += RevStr;//连续显示在TEXTBOX内
stm.Close();
TC.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
服务器 private TcpListener TL = null;
private System.Net.IPEndPoint qSerIpendPoint;
private Thread qSerTh;
private void Form1_Load(object sender, EventArgs e)
{
Start();
}
private void Start()
{
try
{
int IpPort = 1000;
string Ip = "127.0.0.1";
IPAddress Address = IPAddress.Parse(Ip);//
qSerIpendPoint = new IPEndPoint(Address, IpPort);
TL = new TcpListener(qSerIpendPoint);//准备监听
TL.Start();//开始
qSerTh = new Thread(new ThreadStart(Receive));
qSerTh.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void Receive()
{
try
{
Socket socket;
socket = TL.AcceptSocket();
string RemoteEndPoint = socket.RemoteEndPoint.ToString();
Byte[] Stream = new Byte[10240];
socket.Receive(Stream);//接收传来的值
// UTF8Encoding ServerReceiveStr = new UTF8Encoding();
socket.Send(Stream);//向客服端发送一个回复信息
socket.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} 在客户端的文本框输( this.textBox1.Text )入内容后我第一次点击后能从服务器获得数据并能在 this.textBox2.Text显示,
第二次及以后就异常了 为什么?
高手解答
{
Connect(); //这里我第一次点击后能从服务器获得数据,第二次及以后就异常了 为什么?
//高手解答
}
private void Connect()
{
try
{
string ServerIp = "127.0.0.1";//服务器地址
int ServerPort = 1000;//服务器端口号
TcpClient TC = new TcpClient();
TC.Connect(ServerIp, ServerPort);//建立与服务器的连接
NetworkStream stm = TC.GetStream();//通过tcp
UTF8Encoding UTF8 = new UTF8Encoding();
byte[] str = UTF8.GetBytes(this.textBox1.Text);//把输入的内容编码
stm.Write(str, 0, str.Length);//向服务器发送信息 byte[] bb = new byte[10240];//接收服务器返回的数据
int k = stm.Read(bb, 0, 10240);
string RevStr = string.Empty;
RevStr = System.Text.UTF8Encoding.UTF8.GetString(bb, 0, k);//转换
this.textBox2.Text += RevStr;//连续显示在TEXTBOX内
stm.Close();
TC.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
服务器 private TcpListener TL = null;
private System.Net.IPEndPoint qSerIpendPoint;
private Thread qSerTh;
private void Form1_Load(object sender, EventArgs e)
{
Start();
}
private void Start()
{
try
{
int IpPort = 1000;
string Ip = "127.0.0.1";
IPAddress Address = IPAddress.Parse(Ip);//
qSerIpendPoint = new IPEndPoint(Address, IpPort);
TL = new TcpListener(qSerIpendPoint);//准备监听
TL.Start();//开始
qSerTh = new Thread(new ThreadStart(Receive));
qSerTh.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void Receive()
{
try
{
Socket socket;
socket = TL.AcceptSocket();
string RemoteEndPoint = socket.RemoteEndPoint.ToString();
Byte[] Stream = new Byte[10240];
socket.Receive(Stream);//接收传来的值
// UTF8Encoding ServerReceiveStr = new UTF8Encoding();
socket.Send(Stream);//向客服端发送一个回复信息
socket.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} 在客户端的文本框输( this.textBox1.Text )入内容后我第一次点击后能从服务器获得数据并能在 this.textBox2.Text显示,
第二次及以后就异常了 为什么?
高手解答
你的错误是服务端的线程侦听到一个链接后就退出了,导致第二次请求无法响应.
服务端
:
private void Receive()
{
while (true)
{
try
{
Socket socket;
socket = TL.AcceptSocket();
string RemoteEndPoint = socket.RemoteEndPoint.ToString();
Byte[] Stream = new Byte[10240];
socket.Receive(Stream);//接收传来的值
// UTF8Encoding ServerReceiveStr = new UTF8Encoding();
socket.Send(Stream);//向客服端发送一个回复信息
socket.Close();
//socket.Disconnect(true);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Thread.Sleep(100);
}
}
客户端其实不改也没问题,只是资源最好释放干净 private TcpClient TC;
private NetworkStream stm;
private void button3_Click(object sender, EventArgs e)
{
//if (TC==null||!TC.Connected)
//{
Connect();
//}
//Send();
}
private void Connect()
{
try
{
string ServerIp = "127.0.0.1";//服务器地址
int ServerPort = 1000;//服务器端口号
TC = new TcpClient();
TC.Connect(ServerIp, ServerPort);//建立与服务器的连接
stm = TC.GetStream();//通过tcp
UTF8Encoding UTF8 = new UTF8Encoding();
byte[] str = UTF8.GetBytes(this.textBox1.Text);//把输入的内容编码
stm.Write(str, 0, str.Length);//向服务器发送信息
byte[] bb = new byte[10240];//接收服务器返回的数据
int k = stm.Read(bb, 0, 10240);
string RevStr = string.Empty;
RevStr = System.Text.UTF8Encoding.UTF8.GetString(bb, 0, k);//转换
this.textBox2.Text += RevStr;//连续显示在TEXTBOX内
stm.Close();
TC.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
写法有点奇怪,客户段没有用SOCKET。
客户端: private TcpClient TC;
private NetworkStream stm;
private void button3_Click(object sender, EventArgs e)
{
//if (TC==null||!TC.Connected)
//{
Connect();
//}
//Send();
}
private void Connect()
{
try
{
string ServerIp = "127.0.0.1";//服务器地址
int ServerPort = 1000;//服务器端口号
TC = new TcpClient();
TC.Connect(ServerIp, ServerPort);//建立与服务器的连接
stm = TC.GetStream();//通过tcp
UTF8Encoding UTF8 = new UTF8Encoding();
byte[] str = UTF8.GetBytes(this.textBox1.Text);//把输入的内容编码
stm.Write(str, 0, str.Length);//向服务器发送信息
byte[] bb = new byte[10240];//接收服务器返回的数据
int k = stm.Read(bb, 0, 10240);
string RevStr = string.Empty;
RevStr = System.Text.UTF8Encoding.UTF8.GetString(bb, 0, k);//转换
this.textBox2.Text += RevStr;//连续显示在TEXTBOX内
stm.Close();
TC.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
服务端 private TcpListener TL = null;
private System.Net.IPEndPoint qSerIpendPoint;
private Thread qSerTh;
private void button1_Click(object sender, EventArgs e)
{
Start(); }
private void Start()
{
try
{
int IpPort = 1000;
string Ip = "127.0.0.1";
IPAddress Address = IPAddress.Parse(Ip);//
qSerIpendPoint = new IPEndPoint(Address, IpPort);
TL = new TcpListener(qSerIpendPoint);//准备监听
TL.Start();//开始
qSerTh = new Thread(new ThreadStart(Receive));
qSerTh.IsBackground = true;
qSerTh.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void Receive()
{
while (true)
{
try
{
Socket socket;
socket = TL.AcceptSocket();
string RemoteEndPoint = socket.RemoteEndPoint.ToString();
Byte[] Stream = new Byte[10240];
socket.Receive(Stream);//接收传来的值
// UTF8Encoding ServerReceiveStr = new UTF8Encoding();
socket.Send(Stream);//向客服端发送一个回复信息
socket.Close();
//socket.Disconnect(true);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Thread.Sleep(100);
}
}
我的是VS2008,不过设置成FM2.0编译的