以前没做过Socket,一个简单的问题,帮忙实现下:
1.已经有服务端IP和端口
2.有一个待发送的字符串strData
问题:怎样向服务端发送strData,并获得返回值?
谢谢

解决方案 »

  1.   

    TcpClient tcpClient = new TcpClient ();
    tcpClient.Connect (IPAddress.Parse("192.168.0.1"), 11003);NetworkStream netStream = tcpClient.GetStream ();
    Byte[] sendBytes = Encoding.UTF8.GetBytes ("test");
    netStream.Write (sendBytes, 0, sendBytes.Length);
    byte[] bytes = new byte[tcpClient.ReceiveBufferSize];netStream.Read (bytes, 0, (int)tcpClient.ReceiveBufferSize);string returndata = Encoding.UTF8.GetString (bytes);Console.WriteLine ("服务器返回: " + returndata);netStream.Close();
      

  2.   


    Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                IPEndPoint serverPoint = new IPEndPoint(IPAddress.Parse("192.168.2.222"), 8090);
                s.Connect(serverPoint);
                string input;
                while ((input = Console.ReadLine()).Length> 0)
                {
                    byte[] data = Encoding.Default.GetBytes(input);
                    s.Send(data);
                }
      

  3.   

    to cpio:
    tcpClient不需要close吗,除netStream之外还有什么要close的?
      

  4.   

       Thread t_linsten = new Thread(jf_socket.BeginListen);
                jf_socket.PRForm = this;
                t_linsten.Start(); //开始监听
            public void BeginListen()
            {
                IPAddress ServerIp = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];         
                IPEndPoint iep = new IPEndPoint(ServerIp, 8000);
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                byte[] byteMessage = new byte[100];
                socket.Bind(iep);
                while (true)
                {
                    try
                    {
                        socket.Listen(10);
                        Socket newSocket = socket.Accept();
                        newSocket.Receive(byteMessage);
                        Jf_Opereration oper = new Jf_Opereration();
                        oper.Tr_Serverinfo(Encoding.Default.GetString(byteMessage),out re_message,out re_manageinfo);
                        //跨线程消息处理
                        MethodInvoker mi = new MethodInvoker(FormShow);
                        prform.BeginInvoke(mi);
                    }
                    catch (SocketException ex)
                    {
                        File.AppendAllText(@"log.txt",DateTime.Now.ToString() + ":          " + ex.ToString()  +   "  \n");
                        socket.Close();
                    }
                }
            }
     public String Re_Message 
            {
                get { return re_message; }
            }        //主窗体
            public Form PRForm
            {
                get {
                    return prform;
                }
                set {
                    prform = value;
                }
            }
    //发送消息       
            public bool BeginSend(IPAddress serverIp, Int32 port, string msg,out string out_err)
            {
                IPEndPoint iep = new IPEndPoint(serverIp, 8000);
                byte[] byteMessage = Encoding.Default.GetBytes(msg);
                Socket send_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                out_err = null;
                try
                {
                    send_socket.Connect(iep);
                    send_socket.Send(byteMessage);
                    return true;
                }
                catch (SocketException ex)
                {
                    out_err = ex.ToString();
                    return false;
                }
                finally
                {
                    send_socket.Close();
                }
            }
      

  5.   

    String re_message, re_manageinfo;  //服务器返回信息和管理员信息
            Form prform;//主窗体  public bool Tr_Serverinfo(string message,out string re_msg,out string re_manageinfo) 
            {
    }