首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# SOCKET通讯

2012-12-14 
C# SOCKET通信1、socket通信中,不利用委托和事件能接收数据么?2、我要做个TCP通信客户端,每次往服务器端发一

C# SOCKET通信
1、socket通信中,不利用委托和事件能接收数据么?
2、我要做个TCP通信客户端,每次往服务器端发一个字符串然后接收返回的数据就好,这个需要做异步么?不用事件驱动能完成么?
[最优解释]
最好开线程.
[其他解释]
开线程把接受程序放进里面?关键是我不知道怎么能用事件和委托在每次有数据的时候就能触发接受程序呢?
[其他解释]


 TcpClient tcpClient;
        BackgroundWorker bgWorkder = new BackgroundWorker();

 if (tcpClient != null)
            {         
                tcpClient.Close();                
                tcpClient=null;
            }
  try
           {
           IPAddress ip = IPAddress.Parse(txtIp.Text);
            IPEndPoint ipPoint = new IPEndPoint(ip, Convert.ToInt16(txtPort.Text));
            tcpClient = new TcpClient();
            tcpClient.Connect(ipPoint);            
            NetworkStream nStream = tcpClient.GetStream();
            nStream.Write(bytTotal, 0, bytTotal.Length);
           }
           catch(System.Net.Sockets.SocketException ex)
           {
           MessageBox.Show("连接失败!");
                BaseTool.LogError(ex);
                return;
           }
catch (Exception ex)
            {
                BaseTool.LogError(ex);
                MessageBox.Show("未知异常:" + ex.Message);
                return;
            }

          bgWorkder.CancelAsync();
            bgWorkder.Dispose();      
          
            bgWorkder = new BackgroundWorker();
            bgWorkder.WorkerSupportsCancellation = true;
            bgWorkder.DoWork += new DoWorkEventHandler(bgWorkder_DoWork);


            bgWorkder.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorkder_RunWorkerCompleted);
            bgWorkder.RunWorkerAsync();


        void bgWorkder_DoWork(object sender, DoWorkEventArgs e)
        {
            while (tcpClient.Connected)
            {
            if(bgWorkder.CancellationPending)
            {
            e.Cancel=true;
            tcpClient.Close();
            break;
            }
            
                NetworkStream nStream = tcpClient.GetStream();
                byte[] buffer = new byte[8192];//////////////////////////数值太大!
                int received = nStream.Read(buffer, 0, buffer.Length);
                string recMsg = Encoding.GetEncoding("GB2312").GetString(buffer).Substring(0, received);
               
                Thread.Sleep(10);
            }
        }


[其他解释]
楼上的,受教了。还没有用过多线程,对线程、事件触发都不是很了解。能帮我看下我的程序问题为什么链接不上TCP服务端呢?
public partial class Form1 : Form
    {
        
               #region //成员变量
        private IPAddress myIP;
        private IPEndPoint iep;
               private Socket clientSocket;
        private const int datasize = 1024;
        private byte[] data = new byte[1024];

                string host = "127.0.0.1";       
        int port =1000;
        //private string rece_data;
        #endregion
        #region //成员函数
                       private void ConnectServer(IAsyncResult ar)


        {
            clientSocket = (Socket)ar.AsyncState;
            try
            {
                
                clientSocket.EndConnect(ar);
                clientSocket.BeginReceive(data, 0, datasize, SocketFlags.None, new AsyncCallback(ReceiveData), clientSocket);
            }
            catch
            { MessageBox.Show("与服务器连接失败"); }
            }
        private void ReceiveData(IAsyncResult ar)
        {
            try
            {
                Socket server = (Socket)ar.AsyncState;
                int receiveDataLenth = server.EndReceive(ar);
                string str = System.Text.Encoding.Unicode.GetString(data, 0, receiveDataLenth);
            }
            catch
            { MessageBox.Show("客户端接收数据失败"); }
        }

        #endregion
        public Form1()
        {
            
            InitializeComponent();
            
        }
      
        //窗体事件
        private void Form1_Load(object sender, EventArgs e)
        {
                      myIP = IPAddress.Parse(host);
            iep = new IPEndPoint(myIP, port);
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.BeginConnect(iep, new AsyncCallback(ConnectServer), socket);
           
           
}




        


  

        

      
   }
[其他解释]
每次运行到clientSocket.EndConnect(ar);
就运行不动了 
[其他解释]
能加下我的Q指导一下我么?313431610
[其他解释]

引用:
每次运行到clientSocket.EndConnect(ar);
就运行不动了

测试没有发现问题
TCP作为client连接,必须用调试助手或者自己建立一个tcpserver的服务端.
建议下载一个网络调试助手.
协议类型选择tcpserver,建立连接即可

热点排行