先server打开, 然后等待client连接, 连接后可以互发信息
client端:
[STAThread]
static void Main() {
//UDP
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//发送连接测试
IPEndPoint serverIp = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 10086);
client.SendTo(Encoding.ASCII.GetBytes("text connect"), serverIp);
//开个线程显示收到的信息
new Thread(() => {
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint remote = (EndPoint)sender;
byte[] theadReceiveBytes = new byte[1024];
while (true) {
try{
int recv = client.ReceiveFrom(theadReceiveBytes, ref remote);
Console.WriteLine("{0} {1}: ", remote.ToString(), DateTime.Now);
Console.WriteLine(Encoding.ASCII.GetString(theadReceiveBytes, 0, recv));
} catch {
Console.WriteLine("connect failure");
break;
}
}
}).Start();
while (true) {
//接收键盘输入
String input = Console.ReadLine();
if (input == "exit")
break;
//发送
client.SendTo(Encoding.ASCII.GetBytes(input), serverIp);
}
Console.WriteLine("Client close.");
client.Close();
Application.Exit();
}
server端
[STAThread]
static void Main() {
//upd服务
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//绑定 ip,端口
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 10086);
server.Bind(ipep);
Console.WriteLine("wait connect.");
//等待连接
EndPoint clientRemote = null;
{
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint remote = (EndPoint)sender;
byte[] theadReceiveBytes = new byte[1024];
while (clientRemote == null) {
int len = server.ReceiveFrom(theadReceiveBytes, ref remote);
string msg = Encoding.ASCII.GetString(theadReceiveBytes, 0, len);
if (msg == "text connect") {
Console.WriteLine("{0} connect: ", remote.ToString());
clientRemote = remote;
}
}
}
//开个线程显示收到的信息
new Thread(() => {
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint remote = (EndPoint)sender;
byte[] theadReceiveBytes = new byte[1024];
while (true){
try{
int len = server.ReceiveFrom(theadReceiveBytes, ref remote);
Console.WriteLine("{0} {1}: ", remote.ToString(), DateTime.Now);
Console.WriteLine(Encoding.ASCII.GetString(theadReceiveBytes, 0, len));
} catch {
Console.WriteLine("connect failure");
break;
}
}
}).Start();
while (true) {
String input = Console.ReadLine();
if (input == "exit")
break;
server.SendTo(Encoding.ASCII.GetBytes(input), clientRemote);
}
server.Close();
Application.Exit();
}