PYthon -网络编程—TCP编程

来源:互联网 发布:c语言的应用领域 编辑:程序博客网 时间:2024/06/05 22:42

概念:

创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。
服务器端编程如下:
第一步:创建一个socket对象
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
上面的代码创建了一个socket对象。type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。AF_INET表示创建的是ip v4的类型。
socket(address_family,type,protocol_type)

上面三个参数的含义是:

address_family指明要建立哪一类socket。最常用的当然是ip协议,AF_INET。在unix系统中,AF_UNIX也是比较常用的,用于建立unix系统中的进程间通信。

type用于指定通信类型。通常是建立面向连接的流通信。SOCKET_DGRAM是报文通信。如果address_family设置的是AF_INET,那么对应的是TCP和UDP。

protocol_type用于指定协议类型。这个参数是可选的。在建立tcp或者是udp连接的时候他们通常都是0。如果第一个参数是AF_INET,那么这个参数表示是ip包中的protocol字段。
第二步:是将socket绑定到指定的地址:
例:
sock.bind(('localhost',7556)) # 两个参数 :地址、端口 

第三步:监听端口: :【listen方法中的参数指明可接受的最大连接数】
sock.listen(5)
第四步:不断接收请求:收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求.
connection,address = sock.accept()
accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。
第五步:是处理阶段,服务器和客户端通过send和recv方法通信(传输数据)。如果send成功了,那么对方的缓冲区已经有你发送的数据了。#调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符 串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区 删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。
例子:  取自:python TCP编程:——廖雪峰:例:
TCP服务器端连接:
# -*- coding:utf-8 -*- ' a socket example which send echo message to client.'import socket, threadingimport times = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 监听端口:s.bind(('127.0.0.1', 9999))  # 127.0.0.1是一个特殊的IP地址,表示本机地址,如果绑定到这个地址,客户端必须同时在本机运行才能连接,也就是说,外部的计算机无法连接进来。s.listen(5)print 'Waiting for connection...'def tcplink(sock, addr):print 'Accept new connection from %s:%s...' % addrsock.send('Welcome,Godwj')while True:data = sock.recv(1024)time.sleep(1)if data == 'exit' or not data:breaksock.send('Hello, %s!' % data)sock.close()print 'Connection from %s:%s close.' % addrwhile True:# 接受一个新连接:sock, addr = s.accept()  #accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素sock 是新的socket对象,服务器必须通过它与客户通信;第二个元素 addr是客户的Internet地址# 创建新线程来处理TCP连接:t = threading.Thread(target = tcplink, args =(sock, addr))t.start()
客户端编程如下
第一步:
第一步:创建一个socket对象
第二步:建立连接
TCP客户端-例子:
# -*- coding:utf-8 -*-'a socket example which send echo message to server'import socket# 创建socket对象:a = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 建立连接:a.connect(('127.0.0.1', 9999))# 接收欢迎消息:print a.recv(1024)for data in ['Michael', 'Tracy', 'Green']:# 发送数据:a.send(data)print a.recv(1024)a.send('exit')a.close()
(ps: 以上内容仅为学习参考使用)

1 0
原创粉丝点击