当前位置:编程学习 > C#/ASP.NET >>

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();

这边应该建个线程去连接吧。。。


public void Work()
        {
            while (true)
            {
                Socket soket = server.Accept();
                Thread userThread = new Thread(delegate()
                {
                    ResponseClient(soket);
                }
                    );
                userThread.Start();
            }
        }

void ResponseClient(Socket soket)

while(true)
{}

--------------------编程问答-------------------- 为什么有人回复我看不到 --------------------编程问答-------------------- 貌似socket有连接时间限制,如果长时间没有流量,就会关掉,所以一般都定时发心跳的方式,据说可以用keepalive,也有同样效果
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,