C# TCP允許多人連線SERVER和重複開啟的Client
C# TCP允許多人連線SERVER和重複開啟的Client
資料來源:
http://csharp.net-informations.com/communications/csharp-multi-threaded-socket.htm
http://csharp.net-informations.com/communications/csharp-multi-threaded-server-socket.htm
http://csharp.net-informations.com/communications/csharp-multi-threaded-client-socket.htm
專案程式碼:https://github.com/jash-git/CS_TCP_project
SERVER
using System; using System.Threading; using System.Net.Sockets; using System.Text; namespace csharp_multi_threaded_server_socket { //資料來源 http://csharp.net-informations.com/communications/csharp-multi-threaded-server-socket.htm class Program { static void Main(string[] args) { TcpListener serverSocket = new TcpListener(8888); TcpClient clientSocket = default(TcpClient); int counter = 0; serverSocket.Start(); Console.WriteLine(" >> " + "Server Started"); counter = 0; while (true) { counter += 1; clientSocket = serverSocket.AcceptTcpClient(); Console.WriteLine(" >> " + "Client No:" + Convert.ToString(counter) + " started!"); handleClinet client = new handleClinet(); client.startClient(clientSocket, Convert.ToString(counter)); } clientSocket.Close(); serverSocket.Stop(); Console.WriteLine(" >> " + "exit"); Console.ReadLine(); } } //Class to handle each client request separatly public class handleClinet { TcpClient clientSocket; string clNo; public void startClient(TcpClient inClientSocket, string clineNo) { this.clientSocket = inClientSocket; this.clNo = clineNo; Thread ctThread = new Thread(doChat); ctThread.Start(); } private void doChat() { int requestCount = 0; byte[] bytesFrom = new byte[10025]; string dataFromClient = null; Byte[] sendBytes = null; string serverResponse = null; string rCount = null; requestCount = 0; while ((true)) { try { requestCount = requestCount + 1; NetworkStream networkStream = clientSocket.GetStream(); networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize); dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom); dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$")); Console.WriteLine(" >> " + "From client-" + clNo + dataFromClient); rCount = Convert.ToString(requestCount); serverResponse = "Server to clinet(" + clNo + ") " + rCount; sendBytes = Encoding.ASCII.GetBytes(serverResponse); networkStream.Write(sendBytes, 0, sendBytes.Length); networkStream.Flush(); Console.WriteLine(" >> " + serverResponse); } catch (Exception ex) { clientSocket.Close(); Console.WriteLine(" >> " + "Server to clinet(" + clNo + ") closed..." ); break; } } } } }
CLIENT
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; namespace csharp_multi_threaded_client_socket { //資料來源 http://csharp.net-informations.com/communications/csharp-multi-threaded-client-socket.htm public partial class Form1 : Form { System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient(); NetworkStream serverStream; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { msg("Client Started"); clientSocket.Connect("127.0.0.1", 8888); label1.Text = "Client Socket Program - Server Connected ..."; } private void button1_Click(object sender, EventArgs e) { NetworkStream serverStream = clientSocket.GetStream(); byte[] outStream = System.Text.Encoding.ASCII.GetBytes("Message from Client$"); serverStream.Write(outStream, 0, outStream.Length); serverStream.Flush(); byte[] inStream = new byte[10025]; serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize); string returndata = System.Text.Encoding.ASCII.GetString(inStream); msg("Data from Server : " + returndata); } public void msg(string mesg) { textBox1.Text = textBox1.Text + Environment.NewLine + " >> " + mesg; } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { clientSocket.GetStream().Close(); clientSocket.Close(); } } }
One thought on “C# TCP允許多人連線SERVER和重複開啟的Client”
C# SOCKET SERVER CLIENT