cSharp中的套接字编程简单示例
Posted
技术标签:
【中文标题】cSharp中的套接字编程简单示例【英文标题】:Socket programming simple example in c sharp 【发布时间】:2015-01-30 07:00:40 【问题描述】:我在套接字编程中创建了一个简单的应用程序。我认为这是实现这一目标的简单方法。所以这就是我分享这个的原因。 在这个程序中,您可以创建服务器程序和客户端程序。您还可以从客户端和服务器发送和接收消息。 这是我的代码
服务器程序:-
class Program
private const int port = 4532;
static void Main(string[] args)
IPEndPoint ip = new IPEndPoint(IPAddress.Any, 4532);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(ip);
socket.Listen(10);
Console.WriteLine("Waiting for client");
Socket client = socket.Accept();
IPEndPoint clientIP = (IPEndPoint)client.RemoteEndPoint;
Console.WriteLine(" >> Connected with" + clientIP.Address + "at port" + clientIP.Port);
Console.WriteLine(" >> Accept connection from client");
string welcome = "Welcome";
byte[] data = new byte[1024];
data = Encoding.ASCII.GetBytes(welcome);
client.Send(data, data.Length, SocketFlags.None);
Console.WriteLine("......");
Console.Read();
客户程序:-
class Program
static void Main(string[] args)
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 4532);
Console.WriteLine("Client Started");
try
socket.Connect(ip);
catch(SocketException e)
Console.WriteLine("Enable to connect");
Console.WriteLine("Conneted to server");
byte[] data = new byte[1024];
int receivedata = socket.Receive(data);
string stringdata = Encoding.ASCII.GetString(data, 0, receivedata);
Console.WriteLine(stringdata);
Console.Read();
【问题讨论】:
【参考方案1】:嗯,这并不完全正确。
注意Encoding.ASCII.GetBytes
每次都会给你一个新数组,所以new byte[1024]
初始化是没有价值的,如果字符串越大,数组可能越大。
如果服务器发送的有效载荷超过 1024 会怎样?客户端将截断消息,如果您使用 XML 或 JSON 等结构化数据格式,这将导致序列化错误。在 TCP 通信中,您需要定义一个协议来构建数据,以一种您的代码可以确定消息何时开始或结束的方式,例如每行消息或更复杂的东西,如 WebSocket 框架。
请注意,服务器将只接受一个客户端,发送欢迎信息并卡在Console.Read
。它应该在循环中侦听更多客户端,并为每个连接的客户端启动一个新线程或使用异步操作。客户端也一样,它应该循环监听消息。
考虑使用 async/await 进一步扩展您的示例。生产就绪的 TCP 服务器需要多线程才能适当扩展。
看一下asynchronous TCP server and client 的这个例子,它还没有准备好生产,但对于缓冲区读取和异步操作的概念证明来说已经足够了。
【讨论】:
以上是关于cSharp中的套接字编程简单示例的主要内容,如果未能解决你的问题,请参考以下文章