1.这里是服务端的代码,使用socket类来实现,基于vs2015 .net 4.52框架
using System;
using System.Collections.Generic;using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace SocketDemo
{
class Program
{
/// <summary>
/// 服务器;
/// 接受请求
/// 发送数据
/// 接受数据
/// 断开连接
/// </summary>
public static Socket serverSocket = null;
public static byte[] buffer = new byte[100];
private static List<Socket> clientList = new List<Socket>();
static void Main(string[] args)
{
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Udp);
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Any, 9999);
serverSocket.Bind(ipPoint);
serverSocket.Listen(2);
ThreadBegin();
//开一个线程接受
//Thread thread = new Thread(ThreadBegin);
//thread.Start();
Console.ReadKey();
}
public static void ThreadBegin()
{
while (true)
{
try
{
Socket clientSocket = serverSocket.Accept();
Console.WriteLine("客户端连接成功 信息:" + clientSocket.AddressFamily.ToString());
clientSocket.Send(Encoding.UTF8.GetBytes("服务器告诉你连接成功了"));
clientList.Add(clientSocket);
Thread recThread = new Thread(receiveClientMessage);
recThread.Start(clientSocket);
}
catch (Exception)
{
Console.WriteLine("报错了哈哈哈"); ;
}
}
}
private static void receiveClientMessage(object clientSocket)
{
while (true)
{
Socket socket = clientSocket as Socket;
//接受到数据的长度
int length = socket.Receive(buffer);
//显示出来
//Console.WriteLine(Encoding.UTF8.GetString(buffer, 0, length));
string str = Encoding.UTF8.GetString(buffer, 0, length);
//Console.WriteLine(clientList.Count);
for (int i = 0; i < clientList.Count; i++)
{
//if (clientList[i]==clientSocket)
//{
// continue;
//}
if (clientSocket.Equals(clientList[i]))
{
continue;
}
clientList[i].Send(buffer);
Console.WriteLine("发送了数据");
}
}
//buffer = new byte[100];
}
}
}
2.客户端的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace Client
{
class Program
{
/// <summary>
/// 表示客户端
/// </summary>
private static Socket clientSocket;
/// <summary>
/// 接受数据
/// </summary>
private static byte[] buffer=new byte[100];
static void Main(string[] args)
{
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//客户端要连接,不需要bind
IPEndPoint point = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9999);
clientSocket.Connect(point);
Console.WriteLine("连接远程服务器");
Thread threadReceive = new Thread(receiveClientMessage);
threadReceive.Start(clientSocket);
SendMessageToOther();
Console.ReadKey();
}
/// <summary>
/// 接受来自服务端的消息
/// </summary>
/// <param name="clientSocket"></param>
private static void receiveClientMessage(object clientSocket)
{
while (true)
{
Socket socket = clientSocket as Socket;
//接受到数据的长度
int length = socket.Receive(buffer);
Console.WriteLine(length);
//显示出来
Console.WriteLine(Encoding.UTF8.GetString(buffer, 0, length));
}
}
private static void SendMessageToOther()
{
string mes =Console.ReadLine();
clientSocket.Send(Encoding.UTF8.GetBytes(mes));
SendMessageToOther();
}
}
}
有几张图,后面可以扩展,vs不能开多个窗口的话,将客户端项目右键生成到项目的Debug目录中,然后在vs中开启服务端一个窗口,接着客户端的窗口在客户端的项目的Debug(生成目录中)。