作者:迷雾飘渺2702932540 | 来源:互联网 | 2023-09-11 17:52
class Program
{
private static byte[] result = new byte[1024];
private static int myProt = 8001; //端口
static Socket serverSocket;
static void Main(string[] args)
{
//服务器IP地址
IPAddress ip = IPAddress.Parse("192.168.1.188");
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(ip, myProt)); //绑定IP地址:端口
serverSocket.Listen(100); //设定最多10个排队连接请求
Debug.WriteLine("启动监听成功", serverSocket.LocalEndPoint.ToString());
//通过Clientsoket发送数据
Thread myThread = new Thread(ListenClientConnect);
myThread.Start();
Console.ReadLine();
}
///
/// 监听客户端连接
///
private static void ListenClientConnect()
{
while (true)
{
Socket clientSocket = serverSocket.Accept();
string strClientEndpoint = clientSocket.RemoteEndPoint.ToString();//获得客户端IP:PORT
Debug.WriteLine("客户端【" + strClientEndpoint + "】连接成功...");//添加服务端日志
byte[] b = new byte[1024 * 1024 * 2];
clientSocket.Send(Encoding.UTF8.GetBytes("int " + b.Length + "字节" + " sss"));
Thread receiveThread = new Thread(ReceiveMessage);
receiveThread.Start(clientSocket);
}
}
///
/// 接收消息
///
///
///
// List
list = new List();
private static void ReceiveMessage(object clientSocket)
{
Socket myClientSocket = (Socket)clientSocket;
while (true)
{
try
{
//通过clientSocket接收数据
int receiveNumber = myClientSocket.Receive(result);
Debug.Print("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.UTF8.GetString(result, 0, receiveNumber));
string s = Encoding.UTF8.GetString(result, 0, receiveNumber);
string s1 = s.Substring(0, 1);
Tian.GetUserMail(int.Parse(s1));
myClientSocket.Send(result);
Thread.Sleep(5000);
myClientSocket.Send(Encoding.ASCII.GetBytes("Server Say2 Hello"));
}
catch (SocketException ex)
{
// Console.WriteLine(ex.Message);
Debug.Print("客户端{0}", myClientSocket.RemoteEndPoint.ToString()+"退出了",ex);
myClientSocket.Shutdown(SocketShutdown.Both);
myClientSocket.Close();
break;
}
}
}
//03向客户端发送消息
///
/// 向客户端发送消息
///
///
public void Send6(string strMsg)
{
byte[] arrNs = System.BitConverter.GetBytes(strMsg.Length);
byte[] arrMsg = Encoding.UTF8.GetBytes("st");
byte[] arrYs = Encoding.UTF8.GetBytes(strMsg);
byte[] arr = new byte[arrMsg.Length + arrNs.Length + arrYs.Length];
arrMsg.CopyTo(arr, 0);
arrNs.CopyTo(arr, arrMsg.Length);
arrYs.CopyTo(arr, arrMsg.Length + arrNs.Length);
serverSocket.Send(arr);
}
///
/// 04向客户端发送文件数据
///
/// 文件路径
public void SendFile(string strPath)
{
//通过文件流 读取文件内容
using (FileStream fs = new FileStream(strPath, FileMode.OpenOrCreate))
{
byte[] arrFile = new byte[1024 * 1024 * 2];
//读取文件内容到字节数组,并 获得 实际文件大小
int length = fs.Read(arrFile, 0, arrFile.Length);
byte[] ss = new byte[length];
Array.Copy(arrFile, 0, ss, 0, length);
//定义一个 新数组,长度为文件实际长度 +1
byte[] arrFileFina = System.BitConverter.GetBytes(length);
byte[] arrMsg = Encoding.UTF8.GetBytes("im");
// arrFileFina[0] = 1;//设置 数据标识位等于1,代表 发送的是文件
//将 文件数据数组 复制到 新数组中,下标从1开始
byte[] arr = new byte[arrFileFina.Length + arrMsg.Length + length];
arrMsg.CopyTo(arr, 0);
arrFileFina.CopyTo(arr, arrMsg.Length);
ss.CopyTo(arr, arrMsg.Length + arrFileFina.Length);
//发送文件数据
serverSocket.Send(arr);//, 0, length + 1, SocketFlags.None);
}
}
}
我现在的源码 是这样的,不知道应该如何在服务器端转发给 B 求源码 谢谢
11 个解决方案
假如 客户端发来的 是二进制 图片,视频啥的 我也存数据库中?
http://topic.csdn.net/u/20111111/15/0b125fc5-420a-44d9-8de7-1f16058a62e9.html