C#的Socket编程小记

简介:
UDP协议。

看代码:

服务端:
InBlock.gif using System;
InBlock.gif using System.Collections.Generic;
InBlock.gif using System.Linq;
InBlock.gif using System.Text;
InBlock.gif using System.Net;
InBlock.gif using System.Net.Sockets;
InBlock.gif
namespace UDPServer
InBlock.gif{
InBlock.gif         class Program
InBlock.gif        {
InBlock.gif                 static  void Main( string[] args)
InBlock.gif                {
InBlock.gif                         int recv;
InBlock.gif                         byte[] data =  new  byte[1024]; 
InBlock.gif
                         //构建TCP 服务器
InBlock.gif
                         //得到本机IP,设置TCP端口号                 
InBlock.gif                        IPEndPoint ipep =  new IPEndPoint(IPAddress.Parse( "192.168.1.125"), 8001);
InBlock.gif                        Socket newsock =  new Socket(AddressFamily.InterNetwork, SocketType.Dgram , ProtocolType.Udp);
InBlock.gif
                         //绑定网络地址
InBlock.gif                        newsock.Bind(ipep);
InBlock.gif
                        Console.WriteLine( "这里是服务器, 主机名是 {0}",Dns.GetHostName());
InBlock.gif
                         //等待客户机连接
InBlock.gif                        Console.WriteLine( "等待客户端连接");
InBlock.gif
                         //得到客户机IP
InBlock.gif                        IPEndPoint sender =  new IPEndPoint(IPAddress.Any, 0);
InBlock.gif                        EndPoint Remote = (EndPoint)(sender);
InBlock.gif                        recv = newsock.ReceiveFrom(data,  ref Remote); //会阻塞
InBlock.gif                        Console .WriteLine ( "消息来自 {0}: ", Remote.ToString ());
InBlock.gif                        Console.WriteLine(Encoding.UTF8.GetString(data, 0, recv));
InBlock.gif
                         //客户机连接成功后,发送欢迎信息
InBlock.gif                         string welcome =  "欢迎 ! ";
InBlock.gif
                         //字符串与字节数组相互转换
InBlock.gif                         //data    = Encoding .ASCII .GetBytes(welcome);
InBlock.gif                        data = Encoding.UTF8.GetBytes( "服务端>>>"+welcome);
InBlock.gif
                         //发送信息
InBlock.gif                        newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
InBlock.gif                         while ( true)
InBlock.gif                        {
InBlock.gif                                data = new  byte [1024];
InBlock.gif                                 //发送接受信息
InBlock.gif                                recv =newsock.ReceiveFrom(data , ref Remote);
InBlock.gif                                Console.Write( "客户端>>>");
InBlock.gif                                Console.WriteLine(Encoding.UTF8.GetString(data, 0, recv));
InBlock.gif
                                 //向客户端回复信息
InBlock.gif                                newsock.SendTo(data,recv,SocketFlags.None, Remote);
InBlock.gif                        }
InBlock.gif                }
InBlock.gif        }
InBlock.gif}


客户端:
InBlock.gif using System;
InBlock.gif using System.Collections.Generic;
InBlock.gif using System.Linq;
InBlock.gif using System.Text;
InBlock.gif using System.Net;
InBlock.gif using System.Net.Sockets;
InBlock.gif
namespace UdpClient
InBlock.gif{
InBlock.gif         class Program
InBlock.gif        {
InBlock.gif                 static  void Main( string[] args)
InBlock.gif                {
InBlock.gif                         byte[] data =  new  byte[1024];
InBlock.gif                         string input, stringData;
InBlock.gif

InBlock.gif                        Console.WriteLine( "这里是客户端, 主机名是 {0}", Dns.GetHostName());
InBlock.gif
                         //设置服务端IP,设置TCP端口号
InBlock.gif                        IPEndPoint ipep =  new IPEndPoint(IPAddress.Parse( "192.168.1.125"), 8001);
InBlock.gif
                         //定义网络类型,数据连接类型和网络协议UDP
InBlock.gif                        Socket server =  new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
InBlock.gif
                         string welcome =  "你好! ";
InBlock.gif                        data = Encoding.UTF8.GetBytes( "客户端>>>" + welcome);
InBlock.gif                        server.SendTo(data, data.Length, SocketFlags.None, ipep); //向服务端发送数据
InBlock.gif
                        IPEndPoint sender =  new IPEndPoint(IPAddress.Any, 0);
InBlock.gif                        EndPoint Remote = (EndPoint)sender;
InBlock.gif
                        data =  new  byte[1024];
InBlock.gif                         //对于不存在的IP地址,加入此行代码后,可以在指定时间内解除阻塞模式限制
InBlock.gif                         //server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 100);
InBlock.gif                         int recv = server.ReceiveFrom(data,  ref Remote); //将数据接收放入缓冲区
InBlock.gif                        Console.WriteLine( "消息来自服务端 {0}: ", Remote.ToString());
InBlock.gif                        Console.WriteLine(Encoding.UTF8.GetString(data, 0, recv));
InBlock.gif
                         while ( true)
InBlock.gif                        {
InBlock.gif                                input = Console.ReadLine();
InBlock.gif
                                 //如果输入exit则退出
InBlock.gif                                 if (input ==  "exit" || input== "quit")
InBlock.gif                                         break;
InBlock.gif
                                 //input = "客户端>>>" + input;
InBlock.gif                                server.SendTo(Encoding.UTF8.GetBytes(input), Remote);
InBlock.gif
                                data =  new  byte[1024];
InBlock.gif                                recv = server.ReceiveFrom(data,  ref Remote);
InBlock.gif                                stringData = Encoding.UTF8.GetString(data, 0, recv);
InBlock.gif                                Console.Write( "服务端回复>>>");
InBlock.gif                                Console.WriteLine(stringData);
InBlock.gif                        }
InBlock.gif                        Console.WriteLine( "客户端关闭.");
InBlock.gif                        server.Close();
InBlock.gif                }
InBlock.gif        }
InBlock.gif}

研究一个教程,只做了些改动。






 本文转自 xcf007 51CTO博客,原文链接:http://blog.51cto.com/xcf007/318765 ,如需转载请自行联系原作者
相关文章
|
16天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
16天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
20天前
|
网络协议 程序员 Python
pythonTCP客户端编程创建Socket对象
【4月更文挑战第6天】本教程介绍了TCP客户端如何创建Socket对象。Socket作为网络通信的基础单元,包含协议、IP地址和端口等信息。在TCP/IP中,Socket分为流式(TCP)、数据报(UDP)和原始套接字。以Python为例,创建TCP Socket对象需调用`socket.socket(AF_INET, SOCK_STREAM)`。为确保健壮性,应使用异常处理处理可能的`socket.error`。学习本教程将帮助你掌握TCP客户端创建Socket对象的技能。
|
1月前
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
|
1月前
|
网络协议 安全 API
计算机网络之Socket编程
计算机网络之Socket编程
|
2月前
|
网络协议 安全 开发者
Python 中的 Socket 编程
Python 中的 Socket 编程
44 4
|
3月前
|
监控 安全 Linux
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(3)
高并发服务器模型-poll poll介绍   poll跟select类似, 监控多路IO, 但poll不能跨平台。其实poll就是把select三个文件描述符集合变成一个集合了。
36 0
|
3天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
14天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
19天前
|
Python
Python网络编程基础(Socket编程)UDP服务器编程
【4月更文挑战第8天】Python UDP服务器编程使用socket库创建UDP套接字,绑定到特定地址(如localhost:8000),通过`recvfrom`接收客户端数据报,显示数据长度、地址和内容。无连接的UDP协议使得服务器无法主动发送数据,通常需应用层实现请求-响应机制。当完成时,用`close`关闭套接字。