TCP/UDP通讯

TCP/UDP通讯

UDP的:

namespace UDPServer
{
class Program
{
static void Main(string[] args)
{
int recv;
byte[] data = new byte[1024]; 

//构建TCP 服务器

//得到本机IP,设置TCP端口号 
IPEndPoint ipep = new IPEndPoint(IPAddress.Any , 8001);
Socket newsock 
= new Socket(AddressFamily.InterNetwork, SocketType.Dgram , ProtocolType.Udp);

//绑定网络地址
newsock.Bind(ipep);

Console.WriteLine(
"This is a Server, host name is {0}",Dns.GetHostName());

//等待客户机连接
Console.WriteLine("Waiting for a client...");

//得到客户机IP
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote 
= (EndPoint)(sender);
recv 
= newsock.ReceiveFrom(data, ref Remote);
Console .WriteLine (
"Message received from {0}: ", Remote.ToString ());
Console .WriteLine (Encoding .ASCII .GetString (data ,
0,recv ));

//客户机连接成功后,发送欢迎信息
string welcome = "Welcome ! ";

//字符串与字节数组相互转换
data = Encoding .ASCII .GetBytes (welcome );

//发送信息
newsock .SendTo (data ,data.Length ,SocketFlags .None ,Remote );
while (true )
{
data 
=new byte [1024];
//发送接受信息
recv =newsock.ReceiveFrom(data ,ref Remote);
Console .WriteLine (Encoding .ASCII .GetString (data ,
0,recv));
newsock .SendTo (data ,recv ,SocketFlags .None ,Remote );
}
}

}
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace UDPClient
{
class Program
{
static void Main(string[] args)
{
byte[] data = new byte[1024];
string input ,stringData;

//构建TCP 服务器

Console.WriteLine(
"This is a Client, host name is {0}", Dns.GetHostName());

//设置服务IP,设置TCP端口号
IPEndPoint ipep = new IPEndPoint(IPAddress .Parse ("127.0.0.1") , 8001);

//定义网络类型,数据连接类型和网络协议UDP
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

string welcome = "Hello! ";
data 
= Encoding.ASCII.GetBytes(welcome);
server.SendTo(data, data.Length, SocketFlags.None, ipep);
IPEndPoint sender 
= new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote 
= (EndPoint)sender;

data 
= new byte[1024];
int recv = server.ReceiveFrom(data, ref Remote);
Console.WriteLine(
"Message received from {0}: ", Remote.ToString());
Console.WriteLine(Encoding .ASCII .GetString (data,
0,recv));
while (true)
{
input 
= Console .ReadLine ();
if (input =="exit")
break ;
server .SendTo (Encoding .ASCII .GetBytes (input ),Remote );
data 
= new byte [1024];
recv 
= server.ReceiveFrom(data, ref Remote);
stringData 
= Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine(stringData);
}
Console .WriteLine (
"Stopping Client.");
server .Close (); 
}

}
}

 

简单的UDP

try
{
Socket s 
= new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //向此网段发广播包
int UDPListenerPort = 8082;
IPAddress broadcast 
= IPAddress.Parse("192.168.0.255"); //此处根据IP及子网掩码改为相应的广播IP
string ts = "This is UPD string for sending";
byte[] sendbuf = Encoding.ASCII.GetBytes(ts);
IPEndPoint ep 
= new IPEndPoint(broadcast, UDPListenerPort);
s.SendTo(sendbuf, ep);

}
catch (Exception e)
{}




UdpClient listener;
int UDPListenerPort = 8082;
IPEndPoint groupEP 
= new IPEndPoint(IPAddress.Any, UDPListenerPort);

try
{
while (true)
{
byte[] bytes = listener.Receive(ref groupEP);
string RecIP = groupEP.ToString().Substring(0, groupEP.ToString().IndexOf(":"));//收到发送UPD端的IP
string RecStr = Encoding.ASCII.GetString(bytes, 0, bytes.Length); //收到的UPD字符串
}
}
catch
{}

C#UDP的多路广播组的发送和接收 
下列范例使用 UdpClient,在通讯端口11000传送UDP 资料包至多点传送位址群组 224.268.100.2。它传送命令列上指定的信息字串。

using System; 
using System.Net; 
using System.Net.Sockets; 
using System.Text; 

public class UDPMulticastSender { 

private static IPAddress GroupAddress = 
IPAddress.Parse(
"224.168.100.2"); 
private static int GroupPort = 11000

private static void Send( String message) { 
UdpClient sender 
= new UdpClient(); 
IPEndPoint groupEP 
= new IPEndPoint(GroupAddress,GroupPort); 

try { 
Console.WriteLine(
"Sending datagram : {0}", message); 
byte[] bytes = Encoding.ASCII.GetBytes(message); 

sender.Send(bytes, bytes.Length, groupEP); 

sender.Close(); 

catch (Exception e) { 
Console.WriteLine(e.ToString()); 




public static int Main(String[] args) { 
Send(args[
0]); 

return 0

}
using System; 
using System.Net; 
using System.Net.Sockets; 
using System.Text; 

public class UDPMulticastListener { 

private static readonly IPAddress GroupAddress = 
IPAddress.Parse(
"224.168.100.2"); 
private const int GroupPort = 11000

private static void StartListener() { 
bool done = false

UdpClient listener 
= new UdpClient(); 
IPEndPoint groupEP 
= new IPEndPoint(GroupAddress,GroupPort); 

try { 
listener.JoinMulticastGroup(GroupAddress); 
listener.Connect(groupEP); 

while (!done) { 
Console.WriteLine(
"Waiting for broadcast"); 
byte[] bytes = listener.Receive( ref groupEP); 

Console.WriteLine(
"Received broadcast from {0} :\n {1}\n"
groupEP.ToString(), 
Encoding.ASCII.GetString(bytes,
0,bytes.Length)); 


listener.Close(); 

catch (Exception e) { 
Console.WriteLine(e.ToString()); 




public static int Main(String[] args) { 
StartListener(); 

return 0

}

 C#TCP的:

TCPClient
TCPClient 类提供了一种使用 TCP 协议连接到某个端点的简化方法。它还通过 NetworkStream 对象展现在连接过程中读取或写入的数据。请参见下面从 QuickStart 文档中摘录的日期/时间客户机示例。 使用 C# 编写

using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;
class Client
{
public static void Main(String[] args)
{
TCPClient tcpc 
= new TCPClient();
Byte[] read 
= new Byte[32];
if (args.Length != 1)
{
Console.WriteLine(“请在命令行中指定服务器名称”);
return;
}
String server 
= args[0];
// 验证服务器是否存在
if (DNS.GetHostByName(server) == null)
{
Console.WriteLine(“找不到服务器:” 
+ 服务器);
return;
}
// 尝试连接到服务器
if (tcpc.Connect(server, 13== -1)
{
Console.WriteLine(“无法连接到服务器:” 
+ 服务器);
return;
}
// 获取流
Stream s = tcpc.GetStream();
// 读取流并将它转换为 ASCII 码形式
int bytes = s.Read(read, 0, read.Length);
String Time 
= Encoding.ASCII.GetString(read);
// 显示数据
Console.WriteLine(“已接收到的” + 字节 + “字节”);
Console.WriteLine(“当前日期和时间是:” 
+ 时间);
tcpc.Close();
}
}

TCPListener
TCPListener 类便于在来自某个客户机的 TCP 连接的特定套接字上进行侦听的工作。请参见下面包括在 QuickStart 文档中的日期/时间服务器示例。 使用 C# 编写

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class Server
{
public static void Main()
{
DateTime now;
String strDateLine;
Encoding ASCII 
= Encoding.ASCII;
// 在端口 13 进行侦听
TCPListener tcpl = new TCPListener(13);
tcpl.Start();
Console.WriteLine(“正在等待客户进行连接”);
Console.WriteLine(“请按 Ctrl
+c 退出...”);
while (true)
{
// 接收会阻塞,直到有人连接上
Socket s = tcpl.Accept();
// 获取当前的日期和时间并将它连接成一个字符串
now = DateTime.Now;
strDateLine 
= now.ToShortDateString() + " " +
now.ToLongTimeString();
// 将该字符串转换成一个字节数组并发送它
Byte[] byteDateLine =
ASCII.GetBytes(strDateLine.ToCharArray());
s.Send(byteDateLine, byteDateLine.Length, 
0);
Console.WriteLine(“发送” 
+ strDateLine);
}
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值