socket通讯问题
private System.ComponentModel.Container components = null;// 监听线程
private void ThreadServer()
{
textBox1.Text = "";
textBox2.Text = "";
client = new IPEndPoint(IPAddress.Any, 10002);
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Blocking = true;
server.Bind(client);
server.Listen(0);
while (true)
{
Socket t = server.Accept();
if (t != null)
{
stream = new NetworkStream(t);
writer = new StreamWriter(stream);
reader = new StreamReader(stream);
Control.CheckForIllegalCrossThreadCalls = false;
richTextBox1.Text += "接收到一个连接...\n";
writer.WriteLine("欢迎连接到服务器!");
writer.Flush();
writer.WriteLine("您现在可以说话了...");
writer.Flush();
richTextBox1.Text += reader.ReadLine();
richTextBox1.Text += "\n";
byte[] bytes = new byte[100];
Socket dt = server.Accept();
int db = dt.Receive(bytes);// db为成功接收到的字节数
textBox1.Text = db.ToString();//int类型转string
textBox2.Text = System.Text.Encoding.Default.GetString(bytes); //类型转换:byte[]转string
上面一段代码是服务器监听端口的一段代码,首次执行顺利接收到客户端传送过来的字符串,但是传送第二条记录或者第三条记录的时候就出现“无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。“错误。不一定什么时候出现,但是运行一段时间就报这个错误。求大神们解释 --------------------编程问答-------------------- 没高手回答吗?人工置顶。 --------------------编程问答-------------------- 真没有人啊 --------------------编程问答-------------------- while (true)
{
Socket t = server.Accept();
这边应该建个线程去连接吧。。。
--------------------编程问答-------------------- 为什么有人回复我看不到 --------------------编程问答-------------------- 貌似socket有连接时间限制,如果长时间没有流量,就会关掉,所以一般都定时发心跳的方式,据说可以用keepalive,也有同样效果
public void Work()
{
while (true)
{
Socket soket = server.Accept();
Thread userThread = new Thread(delegate()
{
ResponseClient(soket);
}
);
userThread.Start();
}
}
void ResponseClient(Socket soket)
{
while(true)
{}
}
补充:.NET技术 , C#