c# - 服务器客户端发送/接收简单文本

标签 c# .net winforms sockets

我有一项作业是构建一个应用程序,该应用程序将在服务器和客户端之间发送和接收简单的字符串。我知道如何建立连接,但不知道如何发送和接收字符串。这是我的代码:

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, 0, client.ReceiveBufferSize);

            //---convert the data received into a string---
            string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
            Console.WriteLine("Received : " + dataReceived);

            //---write back the text to the client---
            Console.WriteLine("Sending back : " + dataReceived);
            nwStream.Write(buffer, 0, 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, 0, bytesToSend.Length);

            //---read back the text---
            byte[] bytesToRead = new byte[client.ReceiveBufferSize];
            int bytesRead = nwStream.Read(bytesToRead, 0, client.ReceiveBufferSize);
            Console.WriteLine("Received : " + Encoding.ASCII.GetString(bytesToRead, 0, bytesRead));
            Console.ReadLine();
            client.Close();
        }
    }
}

关于c# - 服务器客户端发送/接收简单文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41288908/

相关文章:

c# - 如何发现一个 Web 应用程序并将其加载到另一个 Web 应用程序中?

c# - #if 不在 C# 中调试?

c# - X分钟后黑屏

c# - CrystalReportViewer,查看当前是否显示报表?

c# - 如何在另一个窗口上设置窗口?

C# Json => mysql.需要有关如何处理的建议

c# - HttpRequestException 在 Windows Phone 中的激活事件中使用 HttpClient

javascript - 有人可以解释为什么这个正则表达式与不同的正则表达式风格匹配不同吗?

C#:如何将 switch 与 if 语句结合使用?

c# - 再次提供多线程帮助 (winForms)