读书人

初学者 C# tcp connect连接有关问题

发布时间: 2013-06-26 14:29:32 作者: rapoo

菜鸟 求助C# tcp connect连接问题
用TCP出现的问题,求助
服务端
private void Form1_Load(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(ListenerThread));
t.IsBackground = true;
t.Start();
}

private void ListenerThread()
{
try
{
tcpListener = new TcpListener(new IPEndPoint(IPAddress.Parse("192.168.2.92"), 12000));
tcpListener.Start();
this.Invoke((EventHandler)delegate
{
listBox1.Items.Add("正在监听12000端口");
});
while (true)
{
TcpClient tcpClient = tcpListener.AcceptTcpClient();
IPEndPoint ep = (IPEndPoint)tcpClient.Client.RemoteEndPoint;
this.Invoke((EventHandler)delegate
{
listBox1.Items.Add("有客户端连接成功!");

string ip = ep.Address.ToString();
int port = ep.Port;
listBox1.Items.Add("IP:" + ip + ",端口" + port.ToString());
});
NetworkStream netStream = tcpClient.GetStream();
StreamWriter writer = new StreamWriter(netStream);
StreamReader reader = new StreamReader(netStream);


string temp = reader.ReadLine();
this.Invoke((EventHandler)delegate
{
listBox1.Items.Add(temp);
});
writer.WriteLine(temp.ToUpper());
writer.Flush();
reader.Close();
writer.Close();
netStream.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
客户端
public partial class Form1 : Form
{
TcpClient tcpClient;
public Form1()
{
InitializeComponent();
}

private void SendData()
{
//TcpClient tcpClient = new TcpClient();
//tcpClient.Connect(new IPEndPoint(IPAddress.Parse("192.168.2.92"), 12000));
NetworkStream ns = tcpClient.GetStream();
StreamWriter writer = new StreamWriter(ns);
StreamReader reader = new StreamReader(ns);
writer.WriteLine(textBox1.Text.Trim());
writer.Flush();
string temp = reader.ReadLine();
this.listBox1.Items.Add(temp);
writer.Close();


reader.Close();
}

private void btnSend_Click(object sender, EventArgs e)
{
SendData();
}

private void Form1_Load(object sender, EventArgs e)
{
tcpClient = new TcpClient();
tcpClient.Connect(new IPEndPoint(IPAddress.Parse("192.168.2.92"), 12000));
}
}
出现的问题是客户端只能向服务器端发一次数据,第二次发数据,就会报 不允许对非连接的套接字执行此操作
如果把Form1_Load中代码去掉,SendData()中注释的代码 去掉注释,就能正常的多次发送了,但是这样,每次都要连接一次, 好像很明显,这样的代码,没有意义啊。求大侠们帮忙。

读书人网 >C#

热点推荐