需要使用到的包
using System.Net;
using System.Net.Sockets;
代码如下:
服务端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Test
{
class SocketServices
{
// 设置主机地址
private static IPAddress host = IPAddress.Parse("127.0.0.1");
// 设置端口
private static int port = 16666;
// 设置Socket服务器
private static Socket service_socket = null;
// 设置Socket客户端
private static Socket client_socket = null;
// 设置消息大小
private static byte[] result = new byte[2048];
/// <summary>
/// 构造方法
/// </summary>
public BigEyeCatSocketServices(){
// 创建Socket服务器
service_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 绑定Socket
service_socket.Bind(new IPEndPoint(host, port));
// 设置请求连接的数量
service_socket.Listen(10);
// 设置线程
Thread service_thread = new Thread(Monitor_Client_Connection);
// 启动线程
service_thread.Start();
Console.WriteLine("服务器启动成功!");
}
/// <summary>
/// 侦听客户端
/// </summary>
public static void Monitor_Client_Connection() {
// 设置无线循环
while (true)
{
// 与服务器进行连接
client_socket = service_socket.Accept();
// 设置线程
Thread client_thread = new Thread(Receive_Socket_Message);
// 将客户端加入线程
client_thread.Start(client_socket);
Console.WriteLine("客户端连接成功");
}
}
/// <summary>
/// 发送消息
/// </summary>
public void Send_Socekt_Message(string message)
{
// 将消息转换为字节数组
byte[] byte_send_message = Encoding.UTF8.GetBytes(message);
try
{
// 发送消息给客户端
client_socket.Send(byte_send_message);
}
catch (Exception e)
{
Console.WriteLine("发送消息失败: {0}", e.Message.ToString());
return;
}
}
/// <summary>
/// 接收消息
/// </summary>
public static void Receive_Socket_Message(object client)
{
// 类型转换
Socket socket_client = (Socket)client;
// 设置无线循环
while (true)
{
try
{
// 接收数据
int receive_message_data = socket_client.Receive(result);
if (receive_message_data != 0)
{
// 打印客户端发送的消息
Console.WriteLine("客户端: {0}说: {1}", socket_client.RemoteEndPoint.ToString(), Encoding.UTF8.GetString(result, 0, receive_message_data));
}
else
{
// 终止程序
return;
}
}
catch (Exception e)
{
Console.WriteLine("出现错误: {0}", e.Message.ToString());
// 禁止文件发送和上传
// socket_client.Shutdown(SocketShutdown.Both);
// 结束客户端
socket_client.Close();
break;
}
}
}
public void Close()
{
// 关闭服务器Socket
service_socket.Close();
// 设置客户端Socket
client_socket.Close();
}
}
}
客户端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace Test
{
class SocketClient
{
// 设置主机地址
private static IPAddress host = IPAddress.Parse("127.0.0.1");
// 设置端口
private static int port = 16666;
// 设置服务对象
private static Socket client_socket = null;
/// <summary>
/// 构造方法
/// </summary>
public BigEyeCatSocket(){
try
{
client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client_socket.Connect(new IPEndPoint(host, port));
Console.WriteLine("链接成功");
}
catch (Exception e)
{
Console.WriteLine("链接失败");
Console.WriteLine("错误信息:", e.Message.ToString());
return;
}
}
/// <summary>
/// 发送消息
/// </summary>
/// <param name="message">消息</param>
public void Send_Socekt_Message(string message)
{
// 将消息转换为字节数组
byte[] byte_send_message = Encoding.UTF8.GetBytes(message);
// 发送消息给服务器
client_socket.Send(byte_send_message);
Console.WriteLine("发送成功");
}
/// <summary>
/// 接收消息
/// </summary>
/// <returns></returns>
public string Receive_Socket_Message()
{
int bytes;
string receive_message = "";
// 定义接收消息的数组
byte[] byte_receive_message = new byte[2048];
// 计算消息的的长度
bytes = client_socket.Receive(byte_receive_message, byte_receive_message.Length, 0);
// 接收返回的消息
receive_message += Encoding.UTF8.GetString(byte_receive_message, 0, bytes);
Console.WriteLine("消息接收成功");
return receive_message;
}
public void Close()
{
client_socket.Close();
Console.WriteLine("关闭链接");
}
}
}
运行结果:
文章评论