PYthon -网络编程—TCP编程

概念:

创建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, threading
import time
s = 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...' % addr
	sock.send('Welcome,Godwj')
	while True:
		data = sock.recv(1024)
		time.sleep(1)
		if data == 'exit' or not data:
			break
		sock.send('Hello, %s!' % data)
	sock.close()
	print 'Connection from %s:%s close.' % addr


while 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值