本篇展示一個完整的雙向通訊流程:客戶端發送測試字串,伺服器接收並回應確認訊息。
// Client 端
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace SocketSample
{
class Program
{
static void Main()
{
try
{
int port = 2000;
string host = "127.0.0.1";
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Console.WriteLine("Connecting...");
client.Connect(ipe);
string sendStr = "hello! This is a socket test";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
Console.WriteLine("Send Message");
client.Send(bs, bs.Length, 0);
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes = client.Receive(recvBytes, recvBytes.Length, 0);
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
Console.WriteLine("Client Get Message: {0}", recvStr);
client.Close();
}
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
Console.WriteLine("Press Enter to Exit");
Console.ReadLine();
}
}
}
// Server 端
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace Project1
{
class Program
{
static void Main()
{
try
{
int port = 2000;
string host = "127.0.0.1";
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Bind(ipe);
server.Listen(0);
Console.WriteLine("Wait for connect");
Socket clientSocket = server.Accept();
Console.WriteLine("Get a connect");
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes = clientSocket.Receive(recvBytes, recvBytes.Length, 0);
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
Console.WriteLine("Server Get Message: {0}", recvStr);
string sendStr = "Ok! Client Send Message Successful!";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
clientSocket.Send(bs, bs.Length, 0);
clientSocket.Close();
server.Close();
}
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
Console.WriteLine("Press Enter to Exit");
Console.ReadLine();
}
}
}
Connect、Accept、Send、Receive 皆為同步操作,執行緒會等待完成ArgumentNullException 與 SocketException 確保程式健壯性此範例展示了最基礎的同步 TCP 通訊流程,適合初學者理解 Socket 核心運作機制。