首先要先建立两个VS(Micsoft Visual Studio)项目 一个放 sever脚步 一个放client脚本
sever 脚本
1.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 SeverTest
{
class SeverControl
{
private Socket severSocket;
public SeverControl()
{
severSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
}
public void Start()
{
severSocket.Bind(new IPEndPoint(IPAddress.Any,12321));
severSocket.Listen(10);
Console.WriteLine("服务器启动了");
//接收客服端的方法会挂起当前线程
Thread threadAccept = new Thread(Accept);
threadAccept.IsBackground = true;
threadAccept.Start();
}
public void Accept()
{
Socket client = severSocket.Accept();
IPEndPoint point = client.RemoteEndPoint as IPEndPoint;
Console.WriteLine(point.Address + "【" + point.Port + "】连接成功");
//byte[] msg = new byte[1024];
//int msgLen = client.Receive(msg);
//Console.WriteLine(Encoding.UTF8.GetString(msg,0,msgLen));
Thread threadReceive = new Thread(Receive);
threadReceive.IsBackground = true;
threadReceive.Start(client);
Accept();
}
public void Receive(Object obj)
{
Socket client = obj as Socket;
IPEndPoint point = client.RemoteEndPoint as IPEndPoint;
try {
byte[] msg = new byte[1024];
int msgLen = client.Receive(msg);
Console.WriteLine(point.Address+"【"+point.Port+"】"+Encoding.UTF8.GetString(msg, 0, msgLen));
client.Send(Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(msg,0,msgLen)+"楼上说得对"));
Receive(client);
} catch(Exception exp)
{
Console.WriteLine(point.Address + "【" + point.Port + "】"+"断开了");
}
Receive(client);
}
}
}
主程序类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SeverTest
{
class Program
{
static void Main(string[] args)
{
SeverControl sever = new SeverControl();
sever.Start();
Console.Read();
}
}
}
client脚步:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Threading;
namespace ClientTest
{
class ClientControl
{
private Socket clientSocket;
public ClientControl()
{
clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
}
public void Connect(string ip,int port)
{
clientSocket.Connect(ip,port);
Console.WriteLine("链接服务器成功");
Thread threadRecieve = new Thread(Recieve);
threadRecieve.IsBackground = true;
threadRecieve.Start();
}
private void Recieve()
{
try
{
byte[] msg = new byte[1024];
int msgLen = clientSocket.Receive(msg);
Console.WriteLine("服务器说:" + Encoding.UTF8.GetString(msg, 0, msgLen));
Recieve();
}
catch
{
Console.WriteLine("服务器断开了");
}
}
public void Send(string msg)
{
clientSocket.Send(Encoding.UTF8.GetBytes(msg));
}
}
}
主程序类:
namespace ClientTest
{
class Program
{
static void Main(string[] args)
{
ClientControl client = new ClientControl();
client.Connect("127.0.0.1",12321);
Console.WriteLine("请输入您要发送的内容,输入quit退出");
string msg = Console.ReadLine();
while (msg != "quit")
{
client.Send(msg);
msg = Console.ReadLine();
}
Console.ReadKey();
}
}
}
记得 放好 就行 namespace空间名要改