网络编程之Socket异步编程

看了上篇socket入门,相信你已经对socket有一定的了解了http://www.cnblogs.com/nsky/p/4501782.html

现在来回顾一下。上篇在循环接收客户端连接和循环接收消息的两个方法。都使用了多线程,因为Accept()方法是同步的,所有用了多线程异步执行。

 1 static void Main(string[] args)
 2         {
 3             string ip = "192.168.1.2";
 4             int points = 8000;
 5
 6             Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 7             IPAddress address = IPAddress.Parse(ip);
 8             IPEndPoint point = new IPEndPoint(address, points);
 9
10             socket.Bind(point);
11             socket.Listen(10);
12             Console.WriteLine("服务器已经启动,等待连接");
13             socket.Accept(); //阻塞主线程
14             Console.WriteLine("需要等待客户端连接,我才会执行");
15             Console.ReadLine();
16         }

当运行界面后。

当有客户端连接后

提到同步和异步,想必大家都不陌生。AJAX有同步异步请求,委托有同步异步方法,多线程也有同步异步。同理。对于socket通信,也存在异步通信。

异步通信监听主要是这两个方法:

BeginAccept()和EndAccept()方法

所以把上面的方法稍做修改后

 1 static void Main(string[] args)
 2         {
 3             string ip = "192.168.1.2";
 4             int points = 8000;
 5
 6             Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 7             IPAddress address = IPAddress.Parse(ip);
 8             IPEndPoint point = new IPEndPoint(address, points);
 9
10             socket.Bind(point);
11             socket.Listen(10);
12             Console.WriteLine("服务器已经启动,等待连接");
13             //socket.Accept(); //阻塞主线程
14             //Console.WriteLine("需要等待客户端连接,我才会执行");
15
16             socket.BeginAccept(new AsyncCallback(Listen), socket);
17
18             Console.WriteLine("这里不会阻塞了");
19
20
21
22             Console.ReadLine();
23         }
24         static void Listen(IAsyncResult result)
25         {
26             Socket client = (Socket)result.AsyncState;
27             Socket cy = client.EndAccept(result);
28             Console.WriteLine(cy.RemoteEndPoint + "连接成功");
29         }

运行看。这是客户端没连接器的效果,很显然没有被阻塞了

当有客户端连接成功。则会执行Listen方法

那么客户端连接的也是一样的

BeginConnect()和EndConnect()方法

 1 static void Main(string[] args)
 2         {
 3             string ip = "192.168.1.2";
 4             int points = 8000;
 5
 6             Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 7
 8             IPAddress address = IPAddress.Parse(ip);
 9
10             IPEndPoint point = new IPEndPoint(address, points);
11
12             Console.WriteLine("正在连接:" + address);
13             socket.BeginConnect(point, new AsyncCallback(Connect), socket);
14
15             Console.ReadLine();
16         }
17         static void Connect(IAsyncResult result)
18         {
19             Socket client = result.AsyncState as Socket;
20             client.EndConnect(result);
21             Console.WriteLine(client.RemoteEndPoint.ToString());
22         }
时间: 2024-11-08 15:41:41

网络编程之Socket异步编程的相关文章

网络编程之socket

网络编程之socket socket:在网络编程中的一个基本组件,也称套接字. 一个套接字就是socket模块中的socket类的一个实例. 套接字包括两个: 服务器套接字和客户机套接字 套接字的实例化需要3个参数: 1.地址簇:socket.AF_INET 2. 流:socket.SOCK_STREAM 3.使用的协议: 默认为0 服务器套接字:以下简称socket_server 客户端套接字:以下简称socket_client 地址:address=('127.0.0.1',8000) so

网络编程之Socket & ServerSocket

网络编程之Socket & ServerSocket Socket:网络套接字,网络插座,建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口:socket用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信. 1.客户端Socket类 此类实现客户端套接字 构造方法 构造方法 作用 Socket(String host, i

【转】JAVA网络编程之Socket用法

JAVA网络编程之Socket用法 分类: JAVA2012-08-24 15:56 710人阅读 评论(0) 收藏 举报 在客户/服务器通信模式中,客户端需要主动建立与服务器连接的Socket,服务器端收到客户端的连接请求,也会创建与客户端连接的Socket.Socket可以看做是通信连接两端的收发器,客户端和服务店都通过Socket来收发数据. 1.构造Socket public Socket() 通过系统默认类型的 SocketImpl 创建未连接套接字 public Socket(Str

Java网络编程之Socket通信(二)

之前在前面已经介绍了Socket通信的一些基本原理,以及如何让客户端与服务器端建立通信,和实现通信的一些基本步骤(包括首先使得服务器端与客户端建立连接,建立连接之后,服务器端开始侦听客户端的请求,侦听到客户端的请求之后,通过输入输出流处理相关信息实现通信,最后通信完毕结束通信等一系列流程). 但是之前只是单个客户端与服务器进行通信,而我们实际应用中单个客户端的情况几乎不存在,都是多个客户端同时与服务器进行交互(这里同时交互就会出现并发性的问题,对于并发性的问题暂时还不是很懂,只知道有这个概念),

[深入浅出Cocoa]iOS网络编程之Socket

本文转载至 http://blog.csdn.net/kesalin/article/details/8798039 分类: iOS 开发2013-04-13 20:51 9361人阅读 评论(13) 收藏 举报 iosnetwork 目录(?)[+] 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 更多 Cocoa 开发文章,敬请访问<深入浅出Cocoa> CSDN专栏:http://blog.csdn.net/column/details/

Python网络编程之socket应用

1 引言 2 网络基础 3 socket介绍 4 socket基本使用 5 总结 1 引言 本篇主要对Python下网络编程中用到的socket模块进行初步总结.首先从网络基础理论出发,介绍了TCP协议和UDP协议:然后总结了socket中的常用函数:最后通过实际代码展示基本函数的应用. 2 网络基础 要想理解socket,首先得熟悉一下TCP/IP协议族.TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义

【python之路35】网络编程之socket相关

Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是"一切皆文件",对于文件用[打开][读写][关闭]模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO.打开.关闭) socket和file的区别: fil

网络编程之Socket的TCP协议实现客户端与客户端之间的通信

我认为当你学完某个知识点后,最好是做一个实实在在的小案例.这样才能更好对知识的运用与掌握 如果你看了我前两篇关于socket通信原理的入门文章.我相信对于做出我这个小案列是完全没有问题的!! 既然是小案列.就难免会有很多不足,所以还请大家见谅.先说下用此案例实现的功能 利用Socke的TCP协议实现了 1:端与端之间的通信(客户端和客户端)包括发送文字,小文件,抖动效果 2:同步实现好友下线与上线的效果,即有其他客户端上线会通知其他已经在线的客户端 3:实现自定义通信协议 服务器窗体布局 布局很

python网络编程之socket编程

一 客户端/服务器架构 即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) 美好的愿望: 最常用的软件服务器是 Web 服务器.一台机器里放一些网页或 Web 应用程序,然后启动 服务.这样的服务器的任务就是接受客户的请求,把网页发给客户(如用户计算机上的浏览器),然 后等待下一个客户请求.这些服务启动后的目标就是"永远运行下去".虽然它们不可能实现这样的 目标,但只要没有关机或硬件出错等外力干扰,它们就能运行非常长的一段时间. 生活中的C/S架构: 商