码迷,mamicode.com
首页 > 编程语言 > 详细

python socket编程练习(TCP)

时间:2015-03-19 06:33:32      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:tcp   socket   python   

    python可以利用socket库实现套接字编程。套接字编程通常分为server端和client端,编程时一般是先server再client,这是最正常的逻辑,因为功能是由server提供的,client必须根据server提供的规则来建立连接和发送消息。


server端的函数:

函数描述
s.bind(address)将套接字绑定到地址AF_INET,以元组(host,port)的形式表示地址.
s.listen(backlog)开始监听TCP传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。
s.accept()接受TCP连接并返回(conn,address,其中conn新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。

服务器建立TCP连接的流程如下:

socket()创建套接字->

bind()绑定地址和端口->

listen()开始监听连接请求->

accept()接受连接请求,并返回一个新的套接字用于处理后续操作->

recv()和send()对数据进行收发->

新套接字和旧套接字依次close()->end


代码练习:

import socket

from time import ctime

HOST = ""

PORT = 10012

ADDR = (HOST,PORT)

BUFSIZE = 1024

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(ADDR)

s.listen(5)

while True:
    print "Waiting for connection..."
    conn,addr = s.accept()
    print "...connection from:",addr
    while True:
        data = conn.recv(BUFSIZE)
        if not data:
            break
        conn.send(‘[%s] %s‘%(ctime(),data))
        print [ctime()],‘:‘,data
conn.close()
s.close()


客户端函数:

函数描述
s.connect(address)连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。
s.connect_ex(adddress)功能与connect(address)相同,但是成功返回0,失败返回errno的值。

客户端建立TCP连接的流程:

socket()创建套接字->

connection()请求建立连接->

recv()和send()对数据进行收发->

close()套接字断开连接->end

注意,客户端在建立连接后没有返回新的套接字


代码练习:

import socket
from time import ctime

HOST = ‘localhost‘
PORT = 10012
BUFSIZE = 1024
ADDR = (HOST,PORT)

tcpSock =socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpSock.connect(ADDR)

while True:
    data = raw_input(">")
    if not data:
        break
    tcpSock.send(data)
    
    data = tcpSock.recv(BUFSIZE)
    
    if not data:
        break
    
    print data
   
tcpSock.close()

演示截图如下

客户端输入:

技术分享


服务器端:

技术分享

本文出自 “绵之学习笔记” 博客,请务必保留此出处http://chenmg.blog.51cto.com/3039876/1622025

python socket编程练习(TCP)

标签:tcp   socket   python   

原文地址:http://chenmg.blog.51cto.com/3039876/1622025

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!