在Textbox Windows表单应用中发送和接收在流中的发送和接收的问题

发布于 2025-02-12 12:15:16 字数 6016 浏览 0 评论 0原文

我设法创建了通过表单通信的客户端服务器。

我能够显示拳头等待和接受的消息。

我的问题是,当我写入流并在另一侧阅读表格时。

这是两个程序上发送和接收的地方:

服务器端代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.IO;
using System.Threading;
using System.Net;
using System.Diagnostics;

namespace serverApp
{
   public partial class Form1 : Form
   {
        private static int connections = 0;
   
        public Form1() { }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void CreateServer()
        {
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, 
                ProtocolType.Tcp);
            IPEndPoint localEP = new IPEndPoint(IPAddress.Any, 9050);
            server.Bind(localEP);
            server.Listen(10);

            serverTxtbox.AppendText("waiting for a client");

            BackgroundWorker worker1 = new BackgroundWorker();
            worker1.RunWorkerAsync(handlingFunction(server));
        }

        public object handlingFunction(Socket server)
        {
            while (true)
            { 
                try
                {
                    Socket client = server.Accept();
                   
                    NetworkStream ns = new NetworkStream(client);
                    StreamReader reader = new StreamReader(ns);
                    StreamWriter writer = new StreamWriter(ns);
                    connections++;
                    serverTxtbox.AppendText("New client accepted:  active connections 
                                 ${connections}");
                    writer.WriteLine("Welcome to my server");
                    writer.Flush();
                    string input;

                    while (true)
                    {
                        input = reader.ReadLine();

                        if (input.Length == 0 || input.ToLower() == "exit")
                            break;

                        serverTxtbox.AppendText(input);

                        writer.WriteLine(input);
                        writer.Flush();
                    } //end of while 

                    ns.Close();
                    //client.Close();
                    //connections--;
                    Console.WriteLine("Client disconnected: {0} active  connections", 
                    connections);
                }
                catch (Exception)
                {
                    connections--;
                    Console.WriteLine("Client disconnected: {0} active   connections", connections);
                } //end of catch block
            } // end of HandleConnection function 
        
        private void serverTxtbox_TextChanged(object sender, EventArgs e)
        {
            serverTxtbox.Clear();
        }

        private void button1_Click(object sender, EventArgs e)
        { 
            //start button
            try
            {
                CreateServer();
            }
            catch (Exception)
            {
                serverTxtbox.AppendText("Connection failed ..");
            }
            //client.Close();
            //server.Shutdown();
        }
    }
}

客户端代码:

using System;
using System.ComponentModel;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;

namespace app
{
    public partial class Form1 : Form
    {
        Socket client;
        NetworkStream stream;
        StreamReader reader;
        StreamWriter writer;

        public Form1()
        {
            InitializeComponent();
        }

        private void sendBtn_Click(object sender, EventArgs e)
        {          
            // writing to the server
            handlfun();
        }    

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private object ConnectionToServer(Socket client, IPEndPoint remoteEP)
        {
            //client.Connect(remoteEP);

            try
            {
                client.Connect(remoteEP);
                clientTextbox.Text = "Enter Message for Server <Enter to  Stop >: ";
            }
            catch (SocketException e)
            {
                clientTextbox.AppendText("Unable to  connect to server. ");
                // clientTextbox.AppendText("e");

            }

            return client;
            // Client.Shutdown(SocketShutdown.Both);
            // Client.Close();
        }

        private void connectbtn_Click(object sender, EventArgs e)
        {
            client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);
            BackgroundWorker worker1 = new BackgroundWorker();
            worker1.RunWorkerAsync(ConnectionToServer(client, remoteEP));         
        }

        public void handlfun()
        {
            stream = new NetworkStream(client);
            reader = new StreamReader(stream);
            writer = new StreamWriter(stream);

            String input = clientTextbox.Text;
            writer.WriteLine(input);
            //clientTextbox.Text = input;
            //  String input = reader.ReadLine();

            writer.Flush();
            String line = null;

            while (true)
            {
                clientTextbox.Text = "Enter Message for Server <Enter to  Stop >: ";
                line = clientTextbox.Text;
                writer.WriteLine(line);
                writer.Flush();
                if (line.Length != 0)
                {
                    line = "Echo: " + reader.ReadLine();
                    clientTextbox.Text = line;
                }
            }
        }       
    }
}

I managed to create a client server that communicate through forms.

I am able to display fist waiting and accepted messages.

My problem is when I'm writing to the stream and reading it on the other side the forms.

Here is where the sending and receiving happens on both programs:

Server-side code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.IO;
using System.Threading;
using System.Net;
using System.Diagnostics;

namespace serverApp
{
   public partial class Form1 : Form
   {
        private static int connections = 0;
   
        public Form1() { }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void CreateServer()
        {
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, 
                ProtocolType.Tcp);
            IPEndPoint localEP = new IPEndPoint(IPAddress.Any, 9050);
            server.Bind(localEP);
            server.Listen(10);

            serverTxtbox.AppendText("waiting for a client");

            BackgroundWorker worker1 = new BackgroundWorker();
            worker1.RunWorkerAsync(handlingFunction(server));
        }

        public object handlingFunction(Socket server)
        {
            while (true)
            { 
                try
                {
                    Socket client = server.Accept();
                   
                    NetworkStream ns = new NetworkStream(client);
                    StreamReader reader = new StreamReader(ns);
                    StreamWriter writer = new StreamWriter(ns);
                    connections++;
                    serverTxtbox.AppendText("New client accepted:  active connections 
                                 ${connections}");
                    writer.WriteLine("Welcome to my server");
                    writer.Flush();
                    string input;

                    while (true)
                    {
                        input = reader.ReadLine();

                        if (input.Length == 0 || input.ToLower() == "exit")
                            break;

                        serverTxtbox.AppendText(input);

                        writer.WriteLine(input);
                        writer.Flush();
                    } //end of while 

                    ns.Close();
                    //client.Close();
                    //connections--;
                    Console.WriteLine("Client disconnected: {0} active  connections", 
                    connections);
                }
                catch (Exception)
                {
                    connections--;
                    Console.WriteLine("Client disconnected: {0} active   connections", connections);
                } //end of catch block
            } // end of HandleConnection function 
        
        private void serverTxtbox_TextChanged(object sender, EventArgs e)
        {
            serverTxtbox.Clear();
        }

        private void button1_Click(object sender, EventArgs e)
        { 
            //start button
            try
            {
                CreateServer();
            }
            catch (Exception)
            {
                serverTxtbox.AppendText("Connection failed ..");
            }
            //client.Close();
            //server.Shutdown();
        }
    }
}

Client-side code:

using System;
using System.ComponentModel;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;

namespace app
{
    public partial class Form1 : Form
    {
        Socket client;
        NetworkStream stream;
        StreamReader reader;
        StreamWriter writer;

        public Form1()
        {
            InitializeComponent();
        }

        private void sendBtn_Click(object sender, EventArgs e)
        {          
            // writing to the server
            handlfun();
        }    

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private object ConnectionToServer(Socket client, IPEndPoint remoteEP)
        {
            //client.Connect(remoteEP);

            try
            {
                client.Connect(remoteEP);
                clientTextbox.Text = "Enter Message for Server <Enter to  Stop >: ";
            }
            catch (SocketException e)
            {
                clientTextbox.AppendText("Unable to  connect to server. ");
                // clientTextbox.AppendText("e");

            }

            return client;
            // Client.Shutdown(SocketShutdown.Both);
            // Client.Close();
        }

        private void connectbtn_Click(object sender, EventArgs e)
        {
            client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);
            BackgroundWorker worker1 = new BackgroundWorker();
            worker1.RunWorkerAsync(ConnectionToServer(client, remoteEP));         
        }

        public void handlfun()
        {
            stream = new NetworkStream(client);
            reader = new StreamReader(stream);
            writer = new StreamWriter(stream);

            String input = clientTextbox.Text;
            writer.WriteLine(input);
            //clientTextbox.Text = input;
            //  String input = reader.ReadLine();

            writer.Flush();
            String line = null;

            while (true)
            {
                clientTextbox.Text = "Enter Message for Server <Enter to  Stop >: ";
                line = clientTextbox.Text;
                writer.WriteLine(line);
                writer.Flush();
                if (line.Length != 0)
                {
                    line = "Echo: " + reader.ReadLine();
                    clientTextbox.Text = line;
                }
            }
        }       
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文