随笔 - 657  文章 - 4  评论 - 213  阅读 - 432万

C# Udp Socket例子

服务器端:

复制代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;

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];
            
//对于不存在的IP地址,加入此行代码后,可以在指定时间内解除阻塞模式限制
            
//server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 100);
            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 ();            
        }


    }

}
复制代码
posted on   一路前行  阅读(30249)  评论(12编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2008年10月 >
28 29 30 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示