1-2
C#控制台
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Threading;
using Net;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
private static byte[] result = new byte[1024]; // 存储字节流
private const int port = 8088; // 端口
private static string IpStr = "127.0.0.1"; // IP
private static Socket serverSocket; // Socket对象
static void Main(string[] args)
{
IPAddress ip = IPAddress.Parse(IpStr);
IPEndPoint ip_end_point = new IPEndPoint(ip, port);
// 设置Socket,并限制最大连接数
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(ip_end_point);
serverSocket.Listen(10);
Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());
// 开启新线程用于监听客户端连接
Thread thread = new Thread(ClientConnectListen);
thread.Start();
Console.ReadLine();
}
private static void ClientConnectListen()
{
while (true)
{
// 为客户端连接创建Socket
Socket clientSocket = serverSocket.Accept();
Console.WriteLine("客户端{0}成功连接", clientSocket.RemoteEndPoint.ToString());
// 向客户端发送连接成功消息
ByteBuffer buffer = new ByteBuffer();
buffer.WriteString("Connected Server");
clientSocket.Send(WriteMessage(buffer.ToBytes()));
// 开启新线程用于接收客户端消息
Thread thread = new Thread(RecieveMessage);
thread.Start(clientSocket);
}
}
private static byte[] WriteMessage(byte[] message)
{
//网络数据由 ①数据长度 ②主体数据 两部分构成
MemoryStream ms = null;
using (ms = new MemoryStream())
{
ms.Position = 0;
BinaryWriter writer = new BinaryWriter(ms);
ushort msglen = (ushort)message.Length;
writer.Write(msglen);
writer.Write(message);
writer.Flush();
return ms.ToArray();
}
}
private static void RecieveMessage(object clientSocket)
{
Socket mClientSocket = (Socket)clientSocket;
while (true)
{
try
{
int receiveNumber = mClientSocket.Receive(result);
ByteBuffer buff = new ByteBuffer(result);
//读取数据长度
int len = buff.ReadShort();
//读取主体数据
string data = buff.ReadString();
Console.WriteLine("接收客户端{0}消息, 长度为{1}", mClientSocket.RemoteEndPoint.ToString(), receiveNumber);
Console.WriteLine("数据内容:{0}", data);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
mClientSocket.Shutdown(SocketShutdown.Both);
mClientSocket.Close();
break;
}
}
}
}
}