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

客户端给服务器端发送信息,服务器接受不到~请大神帮忙 !有可能是颜色的部分出错,帮忙找下啊 大神

客户端:
 Thread threadClient = null;//客户端 负责接收 服务器发来的数据消息的线程
 Socket socketClient = null;//客户端套接字

 private void button1_Click(object sender, EventArgs e)
{
            //可以把文本IP 转成IP对象
IPAddress address = IPAddress.Parse(txtIP.Text.Trim());
IPEndPoint endpoint = new IPEndPoint(address, int.Parse(txtDuanKou.Text.Trim()));
socketClient = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            //向指定的IP和端口发送连接请求
socketClient.Connect(endpoint);

            //创建线程 监听服务器 发来的信息
threadClient = new Thread(RecMsg);
threadClient.IsBackground = true;
threadClient.Start(); 
        }

  //客户端发送信息
  private void btnFaShong_Click(object sender, EventArgs e)
{
string xinXi = "ok";
            //将要发送的字符串转换UTF8对应的字节数组
byte[] arrMsg = System.Text.Encoding.UTF8.GetBytes(xinXi);
socketClient.Send(arrMsg);
//输出发送信息
ShowMsg("客户端发送的消息:" + xinXi);



服务器:
Thread threadWatch = null;//定义一个线程,负责监听客户端连接请求的线程
Socket socketWatch = null;//负责监听的快捷字
Thread jieshou = null;//负责接收数据

private void button1_Click(object sender, EventArgs e)
{
            //创建负责监听的快捷字,参数(使用IP4寻址协议,使用流逝连接,使用TCP协议传输数据)
            socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
            IPAddress address = IPAddress.Parse(txtIP.Text.Trim());

            //创建IP 和端口的网络节点对象
            IPEndPoint endpoint = new IPEndPoint(address, int.Parse(txtDuanKou.Text.Trim()));

            //将负责监听的套接字 绑定到唯一的IP和端口上
            socketWatch.Bind(endpoint);
            //设置监听队列的长度
            socketWatch.Listen(5);

            //创建负责监听的线程,并传入监听方法
            threadWatch = new Thread(WachChonecting);                                threadWatch.IsBackground = true;//设置为后台线程
            threadWatch.Start();//开启线程
            ShowMsg("服务器启动监听成功");

            //接收数据
            jieshou = new Thread(JieShou);
            jieshou.IsBackground = true;
            jieshou.Start();
            ShowMsg("客户端发来的消息");
        }

        //准备一个集合
        Dictionary<string, Socket> dict = new Dictionary<string, Socket>();
        Socket socketConnection = null;

      //  Socket socketConnection = null;//负责通信的套接字
        //为了让线程执行Accept方法,监听客户端请求的方法
        void WachChonecting() 
        {
            while (true)//循环是为是了持续不断的新的客户端了连接请求
            {
                //开始监听客户端 Accept方法,会阻断当前线程
                socketConnection = socketWatch.Accept();//一旦监听到客户端的请求,就返回一个负责跟客户端通信的套接字sokConnect
                //向里面追加一个项
                lbOnline.Items.Add(socketConnection.RemoteEndPoint.ToString());

                //将与客户端套接字对象添加到键值对集合中,并与客户端IP端口作为键
                dict.Add(socketConnection.RemoteEndPoint.ToString(),socketConnection);
               //窗体输出信息
                ShowMsg("客户端连接成功");

            }
           
        }

      //循环接收
        void JieShou() {
       while (true)
            {
                socketConnection = socketWatch.Accept();//一旦监听到客户端的请求,就返回一个负责跟客户端通信的套接字sokConnect
                //定义一个接收的字节数组
                byte[] arrMsgJie = new byte[1024];
             
                int length = socketConnection.Receive(arrMsgJie);
                string strMsgJie = System.Text.Encoding.UTF8.GetString(arrMsgJie, 0, length);
                ShowMsg("接收来的数据:"+strMsgJie);
            }
        } socket 多线程 --------------------编程问答-------------------- 问题在服务器;
当服务器Accept到后,你就在当前线程里去再次开辟一个线程去接收数据。




服务器:
Thread threadWatch = null;//定义一个线程,负责监听客户端连接请求的线程
Socket socketWatch = null;//负责监听的快捷字
Thread jieshou = null;//负责接收数据

private void button1_Click(object sender, EventArgs e)
{
            //创建负责监听的快捷字,参数(使用IP4寻址协议,使用流逝连接,使用TCP协议传输数据)
            socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
            IPAddress address = IPAddress.Parse(txtIP.Text.Trim());

            //创建IP 和端口的网络节点对象
            IPEndPoint endpoint = new IPEndPoint(address, int.Parse(txtDuanKou.Text.Trim()));

            //将负责监听的套接字 绑定到唯一的IP和端口上
            socketWatch.Bind(endpoint);
            //设置监听队列的长度
            socketWatch.Listen(5);

            //创建负责监听的线程,并传入监听方法
            threadWatch = new Thread(WachChonecting);                                threadWatch.IsBackground = true;//设置为后台线程
            threadWatch.Start();//开启线程
            ShowMsg("服务器启动监听成功");
            /*
            //接收数据
            jieshou = new Thread(JieShou);
            jieshou.IsBackground = true;
            jieshou.Start();
            ShowMsg("客户端发来的消息");
            */
        }

        //准备一个集合
        Dictionary<string, Socket> dict = new Dictionary<string, Socket>();
        Socket socketConnection = null;

      //  Socket socketConnection = null;//负责通信的套接字
        //为了让线程执行Accept方法,监听客户端请求的方法
        void WachChonecting() 
        {
            while (true)//循环是为是了持续不断的新的客户端了连接请求
            {
                //开始监听客户端 Accept方法,会阻断当前线程
                socketConnection = socketWatch.Accept();//一旦监听到客户端的请求,就返回一个负责跟客户端通信的套接字sokConnect
                //向里面追加一个项
                lbOnline.Items.Add(socketConnection.RemoteEndPoint.ToString());

                //将与客户端套接字对象添加到键值对集合中,并与客户端IP端口作为键
                dict.Add(socketConnection.RemoteEndPoint.ToString(),socketConnection);
               //窗体输出信息
                ShowMsg("客户端连接成功");
                 /*
            //接收数据
            Thread newth= new Thread(JieShou);//局部开辟线程,不要全局
            jieshou.IsBackground = true;
            jieshou.Start();
            ShowMsg("客户端发来的消息");

            }
           
        }

      //循环接收
        void JieShou() {
       while (true)
            {
                socketConnection = socketWatch.Accept();//一旦监听到客户端的请求,就返回一个负责跟客户端通信的套接字sokConnect
                //定义一个接收的字节数组
                byte[] arrMsgJie = new byte[1024];
             
                int length = socketConnection.Receive(arrMsgJie);
                string strMsgJie = System.Text.Encoding.UTF8.GetString(arrMsgJie, 0, length);
                ShowMsg("接收来的数据:"+strMsgJie);
            }
        } 





你的代码写的真心乱哪。。 --------------------编程问答-------------------- 谢谢啊!麻烦你了^.^ --------------------编程问答-------------------- 顺便问一下,怎么把用字符数组传送,改成用流的形式传送数据?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,