套接字

3.socket编程示例

♀尐吖头ヾ 提交于 2020-02-17 05:09:30
#block_server.py 非阻塞IO示例#有个疑惑:下面的connfd的blockind要设置为True,不然会出错,待解决from socket import *from time import ctime,sleeps = socket()s.bind(("0.0.0.0",18888))s.listen(10)#设置s为非阻塞状态s.setblocking(False)while True: print("等待连接...") try: connfd,addr = s.accept() except BlockingIOError: sleep(2) print(ctime()) continue print("connect from",addr) while True: connfd.setblocking(True) data = connfd.recv(1024) if not data: break print(data.decode()) serv_msg = input("服务端消息>") connfd.send(serv_msg.encode()) connfd.close()s.close()=========================================#timeout_server.py 超时检测示例及tracebackfrom

使用 异步多线程TCP Socket 实现进程间通信(VC 6.0 , BCB6.0调试通过)

为君一笑 提交于 2020-02-14 23:57:08
进程间通信有很多种方式,比如说 Pipe,共享内存,DDE,Socket等,关于进程通信方面的知识我在这里就不讨论了,大家可以看我博客里的另一些文章有讲...今天我们主要讨论怎么样使用Socket实现进程间通信。 本程序将使用Socket 的WSAEventSelect异步方式,使用多线程,建立一个服务器类,使用此类的时候只需要将处理数据的函数指针传给该类,进行数据处理,本例中,服务器将启动一个客户端进程,让客户端像服务器发送数据,然后服务端收到数据后将数据打印出来进!从而达到进程通信的目的,当然,如果想进行数据的特殊处理的话,只需要改写处理函就行了,因为,服务器类只是接收函数指针。 本类在C++ builder 6.0 和 VC 6.0调试通过....不过大家注意看程序注释,不同的编译器使用需要修改一点地方,程序注释说的很清楚,我就不在这里介绍了(注意BCB中包含的头文件位置,本类的头文件一定要放在最上面,因为winsock2.h的冲突问题,有关这个问题,有兴趣的朋友自己上网搜,因为时间有限,一篇文章不可能写太多的内容,请大家谅解) 下面我们先来了解一下 Socket 的异步方式 ! (程序源码示例请翻到文章尾下载) 首先,Wi ndows套接字在两种模式下执行I / O操作:锁定和非锁定。 在锁定模式下,在I / O操作完成前,执行操作的Wi nsock函数

Java 之 TCP 通信程序

一笑奈何 提交于 2020-02-14 00:22:43
一、TCP协议概述   TCP(Transmission Control Protocol,传输控制协议)被称作一种端对端协议。是一种面向连接的、可靠的、基于字节流的传输层的通信协议,可以连续传输大量的数据。   这是因为它为当一台计算机需要与另一台远程计算机连接时,TCP协议会采用“三次握手”方式让它们建立一个连接,用于发送和接收数据的虚拟链路。数据传输完毕TCP协议会采用“四次挥手”方式断开连接。   TCP协议负责收集这些信息包,并将其按适当的次序放好传送,在接收端收到后再将其正确的还原。TCP协议保证了数据包在传送中准确无误。TCP协议使用重发机制,当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体确认信息,如果没有收到另一个通信实体确认信息,则会再次重复刚才发送的消息。   TCP 通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server)。   两端通信时步骤:      1、服务端程序,需要事先启动,等待客户端的连接;     2、客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端。   在 Java 中,提供了两个类用于实现 TCP 通信程序:      1、 客户端 :java.net.Socket 类表示。创建 Socket 对象,向服务端发出连接请求,服务器响应请求

Python-网络编程之socket

*爱你&永不变心* 提交于 2020-02-13 07:50:53
Socket 一、代码逻辑图 2、socket方法 sk.bind(address)   s.bind(address) 将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址。 sk.listen(backlog)   开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。 backlog等于5,表示内核已经接到了连接请求,但服务器还没有调用accept进行处理的连接个数最大为5 这个值不能无限大,因为要在内核中维护连接队列 sk.setblocking(bool)   是否阻塞(默认True),如果设置False,那么accept和recv时一旦无数据,则报错。 sk.accept()   接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。   接收TCP 客户的连接(阻塞式)等待连接的到来 sk.connect(address)   连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。 sk.connect_ex(address)   同上,只不过会有返回值,连接成功时返回 0 ,连接失败时候返回编码,例如:10061

c++socket编程(1)

放肆的年华 提交于 2020-02-13 07:50:31
sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。 服务器端编程的步骤: 1:加载套接字库,创建套接字(WSAStartup()/socket()); 2:绑定套接字到一个IP地址和一个端口上(bind()); 3:将套接字设置为监听模式等待连接请求(listen()); 4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept()); 5:用返回的套接字和客户端进行通信(send()/recv()); 6:返回,等待另一连接请求; 7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。 客户端编程的步骤: 1:加载套接字库,创建套接字(WSAStartup()/socket()); 2:向服务器发出连接请求(connect()); 3:和服务器端进行通信(send()/recv()); 4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。 第一式: 加载/释放Winsock库: 1.加载方法: WSADATA wsa; /*初始化socket资源*/ if (WSAStartup(MAKEWORD(1,1),&wsa) != 0) {

C++socket编程步骤

二次信任 提交于 2020-02-12 09:28:17
sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是採用的流式套接字。 server端编程的步骤: 1:载入套接字库,创建套接字(WSAStartup()/socket()); 2:绑定套接字到一个IP地址和一个port上(bind()); 3:将套接字设置为监听模式等待连接请求(listen()); 4:请求到来后,接受连接请求,返回一个新的相应于此次连接的套接字(accept()); 5:用返回的套接字和client进行通信(send()/recv()); 6:返回,等待还有一连接请求; 7:关闭套接字,关闭载入的套接字库(closesocket()/WSACleanup())。 client编程的步骤: 1:载入套接字库,创建套接字(WSAStartup()/socket()); 2:向server发出连接请求(connect()); 3:和server端进行通信(send()/recv()); 4:关闭套接字,关闭载入的套接字库(closesocket()/WSACleanup())。 第一式: 载入/释放Winsock库: 1.载入方法: WSADATA wsa; /*初始化socket资源*/ if (WSAStartup(MAKEWORD(1,1)

windows socket编程

耗尽温柔 提交于 2020-02-12 08:46:05
socket编程是所有协议实现的底层,任何协议都可以用socket来实现。 Winsock启动 winsock服务是以动态链接库Winsock DLL形式实现的,所以必须先对Winsock DLL进行初始化,协商Winsock的版本支持,并分配必要的资源,函数原型为: int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData); 参数wVersionRequested用于指定准备加载的Winsock库的版本,高位字节表示副版本,低位字节表示主版本。 lpWSAData是指向WSADATA类型的指针,该结构中包含了加载的库版本相关信息。WSADATA结构如下: typedef struct WSAData { WORD wVersion; WORD wHighVersion; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYSSTATUS_LEN+1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char *lpVendorInfo; }WSADATA,*LPWSADATA; 举个例子,想加载主版本副版本都为2的Winsock库: WASDATA WSAData;

socket编程步骤

十年热恋 提交于 2020-02-12 07:46:48
sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。在这个程序中,将两个工程添加到一个工作区。要链接一个ws2_32.lib的库文件。 服务器端编程的步骤: 1:加载套接字库,创建套接字(WSAStartup()/socket()); 2:绑定套接字到一个IP地址和一个端口上(bind()); 3:将套接字设置为监听模式等待连接请求(listen()); 4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept()); 5:用返回的套接字和客户端进行通信(send()/recv()); 6:返回,等待另一连接请求; 7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。 服务端代码如下: #pragma comment (lib,"ws2_32.lib") //这句很重要,没有这句编译出错 #include < stdio.h > #include < Winsock2.h > void main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1 , 1 );

win32下的socket编程

被刻印的时光 ゝ 提交于 2020-02-12 07:21:51
// socket.cpp : 定义控制台应用程序的入口点。 // //服务器端 //SOCKET连接过程   //根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。    //服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。   //客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。 //为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。    //连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。 //而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。 //如何开发一个Server-Client模型的程序 //开发原理:    //服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。   // 客户端