在使用TcpListener/TcpClient同步編程之前,要引入兩個命名空間
using System.Net;
using System.Net.Sockets;
服務(wù)器代碼示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace Net
{
class Program
{
static void Main(string[] args)
{
//服務(wù)端對端口進行偵聽:
TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 10001));
listener.Start();
//檢測來自客戶端的連接請求
Console.WriteLine("等待連接請求...........");
TcpClient remoteClient = listener.AcceptTcpClient();
Console.WriteLine("連接到客戶端!!!");
//建立和連接的客戶端的數(shù)據(jù)流(傳輸數(shù)據(jù))
NetworkStream streamFromClient = remoteClient.GetStream();
//創(chuàng)建緩存區(qū)
byte[] buffer = new byte[8096];
//每次讀取緩存中的大小
int byteRead;
try
{
//為了保證數(shù)據(jù)的完整性以及安全性鎖定數(shù)據(jù)流
//讀取客戶端發(fā)送來的數(shù)據(jù)
lock (streamFromClient)
{
byteRead = streamFromClient.Read(buffer, 0, 8096);
Console.WriteLine(DateTime.Now +":收到來自客戶端的消息:"+Encoding.Unicode.GetString(buffer, 0, byteRead));
}
//向連接的客戶端發(fā)送數(shù)據(jù)
lock (streamFromClient)
{
//buffer為發(fā)送的字符數(shù)組
streamFromClient.Write(buffer,0, buffer.Length);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
streamFromClient.Dispose();
remoteClient.Close();
Console.ReadLine();
}
}
}
客戶端代碼示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace Client
{
class Program
{
static void Main(string[] args)
{
TcpClient tcpClient = new TcpClient();
tcpClient.Connect("127.0.0.1", 10001);
if (tcpClient.Connected)
{
NetworkStream streamFromServer = tcpClient.GetStream();
byte[] buffer = Encoding.Unicode.GetBytes("hello world Unity");
int byteRead;
try
{
lock (streamFromServer)
{
//發(fā)送到服務(wù)器
streamFromServer.Write(buffer, 0, buffer.Length);
buffer = new byte[8096];
}
lock (streamFromServer)
{
byteRead = streamFromServer.Read(buffer, 0, 8096);
Console.WriteLine(DateTime.Now + "收到來自服務(wù)器的消息:" + Encoding.Unicode.GetString(buffer, 0, byteRead));
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
Console.ReadLine();
}
}
}