TCP/UDP通讯

TCP/UDP通讯

UDP的:
C# code
   
   
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 ); } } } }

C# code
   
   
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
C# code
   
   
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) {}

C# code
   
   
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。它传送命令列上指定的信息字串。 
C# code
    
    
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 ; } }

C# code
    
    
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的: 
C# code
       
       
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); } } }
http://topic.csdn.net/u/20080623/08/4bbd2475-45f1-42e3-a613-16b094759ade.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值