socket

csharp
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace SocketComm
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
List<Socket> clientList = new List<Socket>();
#region Socket tcp 服务端
{
Socket socket = new Socket(
AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp
);
socket.Bind(new IPEndPoint(IPAddress.Any, 9000));
socket.Listen(1);
Task.Run(() =>
{
while (true)
{
Socket client = socket.Accept();
clientList.Add(client);
Task.Run(() =>
{
while (true)
{
byte[] buffer = new byte[1024];
client.Receive(buffer);
string msg = Encoding.UTF8.GetString(buffer);
Console.WriteLine("从客户端收到:" + msg);
msg += "-服务端发送";
client.Send(Encoding.UTF8.GetBytes(msg));
}
});
}
});
var state = socket.BeginAccept(new AsyncCallback(result =>
{
Console.WriteLine(result.IsCompleted);
}
), null);
state.AsyncWaitHandle.WaitOne();
Console.WriteLine("服务监听已启动...");
}
#endregion
Console.ReadLine();
}
}
}
csharp
// 问题代码
Task.Run(() => { /* 同步Accept循环 */ }); // 方式1:后台线程同步Accept
var state = socket.BeginAccept(...); // 方式2:异步BeginAccept
state.AsyncWaitHandle.WaitOne(); // 这会阻塞主线程

csharp
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace SocketComm
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
List<Socket> clientList = new List<Socket>();
#region Socket tcp 服务端
{
Socket socket = new Socket(
AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp
);
socket.Bind(new IPEndPoint(IPAddress.Any, 9000));
socket.Listen(1);
Task.Run(() =>
{
while (true)
{
Socket client = socket.Accept();
clientList.Add(client);
Task.Run(() =>
{
while (true)
{
byte[] buffer = new byte[1024];
client.Receive(buffer);
string msg = Encoding.UTF8.GetString(buffer);
msg = msg.Replace("\0", "");
Console.WriteLine("从客户端收到:" + msg);
msg += "-服务端发送";
client.Send(Encoding.UTF8.GetBytes(msg));
}
});
}
});
//var state = socket.BeginAccept(new AsyncCallback(result =>
//{
// Console.WriteLine(result.IsCompleted);
//}
//), null);
//state.AsyncWaitHandle.WaitOne();
Console.WriteLine("服务监听已启动...");
}
#endregion
}
}
}

csharp
#region Socket Tcp 客户端
{
using (Socket socket = new Socket(
AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp))
{
socket.ReceiveTimeout = 5000;
socket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9001));
byte[] bytes = Encoding.UTF8.GetBytes("Request");
socket.Send(bytes);
byte[] buffer=new byte[1024];
try
{ socket.Receive(buffer);
string msg = Encoding.UTF8.GetString(buffer).Replace("\0", "");
Console.WriteLine(Encoding.UTF8.GetString(buffer));
}
catch(Exception ex)
{
Console.WriteLine("接收超时");
Console.WriteLine(ex.Message);
}
}
}
#endregion

winform
csharp
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace SocketComm
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
List<Socket> clientList = new List<Socket>();
#region Socket tcp 服务端
{
Socket socket = new Socket(
AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp
);
socket.Bind(new IPEndPoint(IPAddress.Any, 9000));
socket.Listen(1);
Task.Run(() =>
{
while (true)
{
Socket client = socket.Accept();
clientList.Add(client);
Task.Run(() =>
{
while (true)
{
byte[] buffer = new byte[1024];
client.Receive(buffer);
string msg = Encoding.UTF8.GetString(buffer);
msg = msg.Replace("\0", "");
Console.WriteLine("从客户端收到:" + msg);
msg += "-服务端发送";
client.Send(Encoding.UTF8.GetBytes(msg));
}
});
}
});
//var state = socket.BeginAccept(new AsyncCallback(result =>
//{
// Console.WriteLine(result.IsCompleted);
//}
//), null);
//state.AsyncWaitHandle.WaitOne();
Console.WriteLine("服务监听已启动...");
}
#endregion
}
}
}


csharp
// 1. 创建Socket对象
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
// 2. 设置接收超时为5秒
socket.ReceiveTimeout = 5000;
// 3. 连接到服务器(127.0.0.1:9001)
socket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9001));
// 4. 准备要发送的数据并发送
byte[] bytes = Encoding.UTF8.GetBytes("Request");
socket.Send(bytes);
// 5. 准备接收缓冲区并尝试接收响应
byte[] buffer = new byte[1024];
try
{
// 这里会阻塞等待,最多等待5秒
socket.Receive(buffer);
// 如果收到数据,处理并显示
string msg = Encoding.UTF8.GetString(buffer).Replace("\0", "");
Console.WriteLine(Encoding.UTF8.GetString(buffer));
}
catch(Exception ex)
{
// 如果超时或发生其他异常,进入这里
Console.WriteLine("接收超时");
Console.WriteLine(ex.Message);
}
} // 6. using语句结束,自动关闭连接
winform
csharp
List<int> yearMonths=listDate.Where(d=>
DateTime.Parse(d).Year==year).Select(d=>
DateTime.Parse(d).Month).Distinct().ToList();

