服务器端代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using GDW.MessageService;
using System.Threading;namespace WindowsApplication5
{
    public partial class Form1 : Form
    {
        TcpClient client;
        public Form1()
        {
            InitializeComponent();
        }        private void Form1_Load(object sender, EventArgs e)
        {
            //启动监听线程
            Thread tsAccept = new Thread(new ThreadStart(StartListening));
            tsAccept.Start();
        }        /// <summary>
        /// 监听线程函数,用于调用具体处理类
        /// </summary>
        private void StartListening()
        {
            //Listener listener = new Listener();            //从配置文件中读取ip,端口号
            //string serverAddress;
            //string serverPort;
            //Utility.GetServerConfig(out serverAddress, out serverPort);
            int iServerPort = int.Parse("6000");            TcpListener listener = new TcpListener(IPAddress.Any, iServerPort);
            listener.Start();
            while (true)
            {
                try
                {
                    client = listener.AcceptTcpClient();
                    //开启消息处理线程
                    Thread wManager = new Thread(new ThreadStart(ServiceClient));
                    wManager.Start();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("listening Error: " + ex.Message);
                }
            }//end while
        }        private void ServiceClient()
        {
            NetworkStream ns = client.GetStream();            Byte[] buffer = new Byte[100];
            try
            {
                ns.Read(buffer, 0, buffer.Length);
                ns.Close();
                Encoding enc = Encoding.GetEncoding("GB2312");
                string sClientCommand = enc.GetString(buffer);
                Console.WriteLine(sClientCommand);
            }
            catch (Exception ex)
            {
                Console.Write(ex.ToString());
            }
        }
    }
}
客户端代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using GDW.MessageService;
using System.Net;
using System.Net.Sockets;namespace WindowsApplication4
{
    public partial class Form1 : Form
    {
        private static Socket weiwei;
        public Form1()
        {
            InitializeComponent();
        }        private void button1_Click(object sender, EventArgs e)
        {
            weiwei = NetService.ConnectServer("192.168.58.88", 6000);
            NetService.SendData(weiwei,"董伟", 10);
        }        private void Form1_Load(object sender, EventArgs e)
        {
            IPAddress ipAddress = IPAddress.Parse("192.168.58.88");
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 6000);
            weiwei = new Socket(ipEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            weiwei.Connect(ipEndPoint);            //weiwei = NetService.ConnectServer("192.168.58.88", 6000);
            NetService.SendData(weiwei, "董伟", 10);
        }
    }
}其中NetService是另一个类,用来发送数据用的问题:不知道什么原因,每次发数据都要重新连接一下 weiwei = NetService.ConnectServer("192.168.58.88", 6000);
NetService.ConnectServer()方法用于连接的,如果不连接就会报socket为空,请问有没有谁知道是什么原因啊,谢谢!

解决方案 »

  1.   

     这句不知有否问题:client   =   listener.AcceptTcpClient(); 
    用 socket.bind(.. );
       socket.accept();
    不知能否给你一点帮助
      

  2.   

    你的客户端好象是基于web的? 是不是每次发送数据时时调用了Form1_Load,所以重新连接一下   weiwei   =   NetService.ConnectServer( "192.168.58.88 ",   6000);?
      

  3.   

    服務器部分,先修改一下,試試                //修改ServerClient方法,增加參數
                    private   void   ServiceClient(object param) 
                    { 
                            TcpClient client=(TcpClient)param;
                            NetworkStream   ns   =   client.GetStream();                         Byte[]   buffer   =   new   Byte[100]; 
                            try 
                            { 
                                    ns.Read(buffer,   0,   buffer.Length); 
                                    ns.Close(); 
                                    Encoding   enc   =   Encoding.GetEncoding( "GB2312"); 
                                    string   sClientCommand   =   enc.GetString(buffer); 
                                    Console.WriteLine(sClientCommand); 
                            } 
                            catch   (Exception   ex) 
                            { 
                                    Console.Write(ex.ToString()); 
                            } 
                    } 
         //調用時,修改為
          Thread wManager= new Thread(new ParameterizedThreadStart(ServiceClient)); 
      

  4.   

    調用部分,未寫完整                                try 
                                    { 
                                            client   =   listener.AcceptTcpClient(); 
                                            //开启消息处理线程 
                                            Thread   wManager   =   new   Thread(new   ThreadStart(ServiceClient)); 
                                            wManager.Start(client); 
                                    } 
      

  5.   

    寫亂了,重貼                //修改ServerClient方法,增加參數
                    private   void   ServiceClient(object param) 
                    { 
                            TcpClient client=(TcpClient)param;
                            NetworkStream   ns   =   client.GetStream();                         Byte[]   buffer   =   new   Byte[100]; 
                            try 
                            { 
                                    ns.Read(buffer,   0,   buffer.Length); 
                                    ns.Close(); 
                                    Encoding   enc   =   Encoding.GetEncoding( "GB2312"); 
                                    string   sClientCommand   =   enc.GetString(buffer); 
                                    Console.WriteLine(sClientCommand); 
                            } 
                            catch   (Exception   ex) 
                            { 
                                    Console.Write(ex.ToString()); 
                            } 
                    } 
         //調用時,修改為
          try 
         { 
            client   =   listener.AcceptTcpClient(); 
            //开启消息处理线程 
             Thread wManager= new Thread(new ParameterizedThreadStart(ServiceClient)); 
            wManager.Start(client);
         }
      

  6.   

    寫亂了,重貼                //修改ServerClient方法,增加參數
                    private   void   ServiceClient(object param) 
                    { 
                            TcpClient client=(TcpClient)param;
                            NetworkStream   ns   =   client.GetStream();                         Byte[]   buffer   =   new   Byte[100]; 
                            try 
                            { 
                                    ns.Read(buffer,   0,   buffer.Length); 
                                    ns.Close(); 
                                    Encoding   enc   =   Encoding.GetEncoding( "GB2312"); 
                                    string   sClientCommand   =   enc.GetString(buffer); 
                                    Console.WriteLine(sClientCommand); 
                            } 
                            catch   (Exception   ex) 
                            { 
                                    Console.Write(ex.ToString()); 
                            } 
                    } 
         //調用時,修改為
          try 
         { 
            client   =   listener.AcceptTcpClient(); 
            //开启消息处理线程 
             Thread wManager= new Thread(new ParameterizedThreadStart(ServiceClient)); 
            wManager.Start(client);
         }