簡體   English   中英

使用套接字的C#中的2路消息傳遞系統

[英]2 Way messaging system in C# using Sockets

我正在嘗試創建一種雙向聊天消息傳遞系統,該系統可以發送一條消息,另一方可以接收並發送回一條消息,另一方也可以回復。 我找到了可以用來制作我的代碼,它可以正常工作,但是它只是單向消息系統,因此我希望客戶端可以將消息發送到服務器,然后服務器將消息發送回客戶端。

我的代碼看起來像這樣,這是單向的

服務器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Threading;
using System.IO;

namespace Sever
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpListener serverSocket = new TcpListener(4523);
            serverSocket.Start();
            Console.WriteLine("Started!");
            while (true)
            {
                TcpClient clientSocket = serverSocket.AcceptTcpClient();
                handleClient clientx = new handleClient();
                clientx.startClient(clientSocket);
            }
        }
    }

    public class handleClient
    {
        TcpClient clientSocket;
        public void startClient(TcpClient inClientSocket)
        {
            this.clientSocket = inClientSocket;
            Thread ctThread = new Thread(Chat);
            Thread xthread = new Thread(msg);
            ctThread.Start();
        }

        private void Chat()
        {
            byte[] buffer = new byte[100];
            while (true)
            {
                NetworkStream ns = clientSocket.GetStream();
                BinaryReader reader = new BinaryReader(clientSocket.GetStream());
                Console.WriteLine(reader.ReadString());
            }
        }

        private void msg()
        {
            byte[] buf2 = new byte[100];
            while (true)
            {
                TcpClient client = new TcpClient("localhost", 4523);
                NetworkStream ns = client.GetStream();
                string str = Console.ReadLine();
                BinaryWriter bw = new BinaryWriter(client.GetStream());
                bw.Write(str);
            }
        }
    }
}

現在這是客戶。

class Program
{
    static void Main(string[] args)
    {
        while (true)
        {
            TcpClient client = new TcpClient("localhost",4523);
            NetworkStream ns = client.GetStream();
            byte[] buffer = new byte[100];
            string str = Console.ReadLine();
            BinaryWriter bw = new BinaryWriter(client.GetStream());
            bw.Write(str);
        }
    }
}

我真正缺少的是什么,客戶端保持不變?

好吧,我終於解決了它,現在是2種方式的聊天,是同時與Streamwriter和Reader一起完成的。

服務器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Threading;
using System.IO;

namespace Sever
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpListener serverSocket = new TcpListener(4523);
            serverSocket.Start();
            Console.WriteLine("Started!");
            while (true)
            {
                TcpClient clientSocket = serverSocket.AcceptTcpClient();
                handleClient clientx = new handleClient();
                clientx.startClient(clientSocket);
            }
        }
    }

    public class handleClient
    {
        TcpClient clientSocket;
        public void startClient(TcpClient inClientSocket)
        {
            this.clientSocket = inClientSocket;
            Thread ctThread = new Thread(Chat);
            ctThread.Start();
        }

        private void Chat()
        {
            byte[] buffer = new byte[100];
            while (true)
            {
                NetworkStream ns = clientSocket.GetStream();
                BinaryReader reader = new BinaryReader(clientSocket.GetStream());
                Console.WriteLine(reader.ReadString());

                BinaryWriter bw = new BinaryWriter(clientSocket.GetStream());
                string str = Console.ReadLine();
                bw.Write(str);
            }
        }
     }
}

客戶

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.IO;

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                TcpClient client = new TcpClient("localhost",4523);
                NetworkStream ns = client.GetStream();
                byte[] buffer = new byte[100];
                string str = Console.ReadLine();
                BinaryWriter bw = new BinaryWriter(client.GetStream());
                bw.Write(str);

                BinaryReader br = new BinaryReader(client.GetStream());
                Console.WriteLine(br.ReadString());
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM