各位,求助了,我监听本机一个端口,把这个端口接收到的数据发送到另外的计算机的指定端口上,现在有时可以接收到,有时要出问题,
        //回发数据给客户端
        private void RecieveCallBack(IAsyncResult ar)
这个是接收完毕的函数,函数实现可能有问题,麻烦各位给看下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net.Sockets;
using System.Threading;
using System.Net;namespace 网络通信服务端接收
{
    public partial class Form1 : Form
    {
        //变量
        private ThreadStart start;
        private Thread listenThread;
        static private bool m_bListening = false;
        static private System.Net.IPAddress MyIP = System.Net.IPAddress.Parse("192.168.222.98");
        static private TcpListener listener = new TcpListener(MyIP, 50010);
        private String msg;
        private Socket[] clientSocket;
        private int clientNum;
        private Socket socket;
        private IPEndPoint serverInfo;        byte[] buffer = new byte[1024];
        //初始化监听器        public Form1()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
            start = new ThreadStart(startListen);
            listenThread = new Thread(start);   
        }        //服务器线程处理
        private void startListen()
        {            //Socket socket = listener.AcceptSocket();            
            while (true)
            {
                
                clientSocket[clientNum] = socket.Accept();
                clientSocket[clientNum].BeginReceive(buffer, 0, buffer.Length, 0, new AsyncCallback(RecieveCallBack), clientSocket[clientNum]);
                tbNews.AppendText(clientSocket[clientNum].RemoteEndPoint.ToString() + "成功连接服务器\r\n");
                
            }
        }        private void btn_startServer_Click(object sender, EventArgs e)
        {
            m_bListening = true;
            clientNum = 0;
            clientSocket = new Socket[65535];            serverInfo = new IPEndPoint(IPAddress.Parse("192.168.222.98"), Int32.Parse("50010"));
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Bind(serverInfo);
            socket.Listen(50);            listenThread.Start();
            tbNews.AppendText("开始监听...\r\n");
            btn_startServer.Enabled = false;
            btn_closeServer.Enabled = true;        }        private void btn_closeServer_Click(object sender, EventArgs e)
        {
            m_bListening = false;
            tbNews.AppendText("停止监听...\r\n");
            btn_startServer.Enabled = true;
            btn_closeServer.Enabled = false;
        }
        //回发数据给客户端
        private void RecieveCallBack(IAsyncResult ar)
        {
            Socket s = (Socket)ar.AsyncState;
            int read = s.EndReceive(ar);            if (read > 0)
            {
                string strContent = Encoding.ASCII.GetString(buffer, 0, read);
                //sendMsg(strContent);
                tbNews.AppendText("接收到" + strContent.Length + "字节,内容:\r\n-----" + strContent + "\r\n");
            }        }        public void sendMsg(string msg)
        {
            try
            {
                TcpClient client = new TcpClient("192.168.222.98", 5003);
                NetworkStream sendStream = client.GetStream();
                //StreamWriter writer = new StreamWriter(sendStream);
                Byte[] sendBytes = Encoding.Default.GetBytes(msg);
                sendStream.Write(sendBytes, 0, sendBytes.Length);
                //writer.Flush();
                sendStream.Close();
                client.Close();
                //textBox1.Text = "Msg Sent!";            }
            catch (System.Exception e)
            {
                tbNews.AppendText("" +e.Message + "\r\n");            }
        }    }
}

解决方案 »

  1.   

    不是,首先帮看下这个处理有问题没?
           //回发数据给客户端
            private void RecieveCallBack(IAsyncResult ar)
            {
                Socket s = (Socket)ar.AsyncState;
                int read = s.EndReceive(ar);            if (read > 0)
                {
                    string strContent = Encoding.ASCII.GetString(buffer, 0, read);
                    //sendMsg(strContent);
                    tbNews.AppendText("接收到" + strContent.Length + "字节,内容:\r\n-----" + strContent + "\r\n");
                }        }