[英]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.