我有一个功课来构建一个应用程序,它将在服务器和客户端之间发送和接收简单的字符串.我知道如何建立连接,但不知道如何发送和接收字符串.这是我的代码:
public partial class Form1 : Form { private Thread n_server; private Thread n_client; private Thread n_send_server; private TcpClient client; private TcpListener listener; private int port = 2222; private string IP = " "; private Socket socket; public Form1() { InitializeComponent(); } private void exitToolStripMenuItem_Click(object sender,EventArgs e) { Application.Exit(); } public void Server() { listener = new TcpListener(IPAddress.Any,port); listener.Start(); try { socket = listener.AcceptSocket(); if (socket.Connected) { textBox2.Invoke((MethodInvoker)delegate { textBox2.Text = "Client : " + socket.RemoteEndPoint.ToString(); }); } } catch { } } public void Client() { IP = "localhost"; client = new TcpClient(); try { client.Connect(IP,port); } catch (Exception ex) { MessageBox.Show("Error : " + ex.Message); } if (client.Connected) { textBox3.Invoke((MethodInvoker)delegate { textBox3.Text = "Connected..."; }); } } private void button1_Click(object sender,EventArgs e) { n_server = new Thread(new ThreadStart(Server)); n_server.IsBackground = true; n_server.Start(); textBox1.Text = "Server up"; } private void button2_Click(object sender,EventArgs e) { n_client = new Thread(new ThreadStart(Client)); n_client.IsBackground = true; n_client.Start(); } private void send() { // I want to use this method for both buttons : "send button" on server side and "send button" // on client side. First I read text from textBox2 on server side or textBox3 // on client side than accept and write the string to label2(s) or label3(c). // } private void button3_Click(object sender,EventArgs e) { n_send_server = new Thread(new ThreadStart(send)); n_send_server.IsBackground = true; n_send_server.Start(); } }
解决方法
以下代码从服务器发送并接收当前的日期和时间
//以下代码适用于服务器应用程序:
namespace Server { class Program { const int PORT_NO = 5000; const string SERVER_IP = "127.0.0.1"; static void Main(string[] args) { //---listen at the specified IP and port no.--- IPAddress localAdd = IPAddress.Parse(SERVER_IP); TcpListener listener = new TcpListener(localAdd,PORT_NO); Console.WriteLine("Listening..."); listener.Start(); //---incoming client connected--- TcpClient client = listener.AcceptTcpClient(); //---get the incoming data through a network stream--- NetworkStream nwStream = client.GetStream(); byte[] buffer = new byte[client.ReceiveBufferSize]; //---read incoming stream--- int bytesRead = nwStream.Read(buffer,client.ReceiveBufferSize); //---convert the data received into a string--- string dataReceived = Encoding.ASCII.GetString(buffer,bytesRead); Console.WriteLine("Received : " + dataReceived); //---write back the text to the client--- Console.WriteLine("Sending back : " + dataReceived); nwStream.Write(buffer,bytesRead); client.Close(); listener.Stop(); Console.ReadLine(); } } }
//这是客户端的代码
namespace Client { class Program { const int PORT_NO = 5000; const string SERVER_IP = "127.0.0.1"; static void Main(string[] args) { //---data to send to the server--- string textToSend = DateTime.Now.ToString(); //---create a TCPClient object at the IP and port no.--- TcpClient client = new TcpClient(SERVER_IP,PORT_NO); NetworkStream nwStream = client.GetStream(); byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(textToSend); //---send the text--- Console.WriteLine("Sending : " + textToSend); nwStream.Write(bytesToSend,bytesToSend.Length); //---read back the text--- byte[] bytesToRead = new byte[client.ReceiveBufferSize]; int bytesRead = nwStream.Read(bytesToRead,client.ReceiveBufferSize); Console.WriteLine("Received : " + Encoding.ASCII.GetString(bytesToRead,bytesRead)); Console.ReadLine(); client.Close(); } } }