服务端:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
namespace ConsoleApp1
{
class Program
{
public static string log = "";
private static Socket severSocket = null;
static void Main(string[] args)
{
severSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
while (true)
{
Console.WriteLine("请输入您想要监听的端口号(范围从0到65535),输入help获取帮助!,输入quit关闭!");
string readkey = Console.ReadLine().ToString();
if (readkey == "help")
{
Console.WriteLine(StaticData.CommonPort);
}
else if (readkey == "quit")
{
severSocket.Close();
break;
}
else
{
int ip = Convert.ToInt32(readkey.ToString());
statrSocket(ip);
}
}
}
public static void statrSocket(int ip) {
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, ip);
severSocket.Bind(endPoint); // 绑定
severSocket.Listen(10); // 设置最大连接数
Console.WriteLine("开始监听[" + ip + "]端口");
Thread thread = new Thread(ListenClientConnect); // 开启线程监听客户端连接
thread.Start();
Console.ReadKey();
}
private static void ListenClientConnect()
{
while (true)
{
try
{
Socket clientSocket = severSocket.Accept(); // 接收客户端连接
Console.WriteLine("客户端连接成功 信息: " + clientSocket.AddressFamily.ToString());
clientSocket.Send(Encoding.Default.GetBytes("你连接成功了"));
Thread revThread = new Thread(ReceiveClientManage);
revThread.Start(clientSocket);
}
catch (Exception e)
{
SetTxt("错误", e.ToString());
}
}
}
private static void ReceiveClientManage(object clientSocket)
{
while (true)
{
try
{
Socket socket = clientSocket as Socket;
byte[] buffer = new byte[1024];
int length = socket.Receive(buffer); // 从客户端接收消息
var dt = Encoding.Default.GetString(buffer).Trim().ToString();
Console.WriteLine("收到消息:" + dt);
//获取IP
IPEndPoint clientipe = (IPEndPoint)socket.RemoteEndPoint;
var ip = "[" + clientipe.Address.ToString() + "] ".ToString();
SetTxt(ip, dt);
}
catch (Exception e)
{
}
}
}
/// <summary>
/// 输出到日志文件
/// </summary>
/// <param name="ip">访问IP</param>
/// <param name="dt">写入数据</param>
/// <returns></returns>
public static void SetTxt(string ip,string dt) {
try
{
string txtpath = System.AppDomain.CurrentDomain.BaseDirectory.ToString() + "log.txt";
File.AppendAllText(txtpath, "\r\n" + ip + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + dt);
}
catch {
string filename = DateTime.Now.ToString("yyyy-MM-ddHH:mm:ss");
string txtpath = System.AppDomain.CurrentDomain.BaseDirectory.ToString() + Guid.NewGuid().ToString("N")+"log.txt";
File.AppendAllText(txtpath, "\r\n" + ip + filename + ":" + dt);
}
}
}
}
所有接收内容会输出到运行路径下的log.txt文件如果log.txt文件读写被占用回生成一个guid命名的.txt文件