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 ,如需转载请自行联系原作者
相关文章
|
8天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
8天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
13天前
|
网络协议 程序员 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月前
socket编程之回声服务器函数的陷阱
由connect函数使用不当导致的小错误 话不多说先看代码:
25 0
|
3月前
|
C语言
socket编程之回声服务器
回声服务器的实现 结合我们之前对socket函数的分析,现在做一个最简单的回声服务器(由客户端输入一串字符,再由服务器端转换成大写字符回显给客户端)
26 0
|
3月前
|
API C++
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(1)
前言   本文旨在学习socket网络编程这一块的内容,epoll是重中之重,后续文章写reactor模型是建立在epoll之上的。
34 0
|
3月前
|
监控 安全 Linux
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(3)
高并发服务器模型-poll poll介绍   poll跟select类似, 监控多路IO, 但poll不能跨平台。其实poll就是把select三个文件描述符集合变成一个集合了。
35 0