python网络编程之TCP

来源:互联网 发布:全国网络电视台直播 编辑:程序博客网 时间:2024/05/17 06:39

1.TCP服务端编写过程

2.TCP服务端代码

3.TCP客户端编写过程

4.TCP客户端代码


1.TCP服务端编写过程

首先,网络编程分为客户端编程和服务端编程。先说说服务端的编写

TCP服务端的编写过程


0.所需要引入的包: import socket

1.socket():socket模块中的socket对象 可用于建立一个套接字。原形:socket(family,type)

family 填 :socket.AF_INET 表示地址族为 ipv4  (现在还基本都是用 IPv4)

type   填 :socket.SOCK_STREAM 表示用的协议是 流协议(即TCP)

返回值 : 返回一个套接字对象,暂且把它叫做 s 


2.bind():用于把  套接字和(主机地址,端口号)进行绑定,使套接字和主机相关联

bind()是存在套接字对象中的。调用时: 套接字.bind()  ,例 s.bind()

bind()只有一个参数: 这个参数是个元组,里面的元素是 主机ip号和端口号,即 bind((ip,端口) )


3.listen():把程序进入监听模式,等待客户端的连接。把socket设置成服务器模式

一个整型参数:这个参数指定程序拒绝连接前,操作系统允许它挂起的连接数量,一般设置为5就行了

同样这个方法也是要用套接字对象调用的,即 s.listen()


4.accept():它会阻塞直到有客户端连接进来,然后返回一个元组,元组的数据是 代表客户端的新套接字 和 客户端的地址

同样这个方法也是要用套接字对象调用的


5.close():用于关闭套接字,停止本进程与服务端或客户端的连接

同样这个方法也是要用套接字对象调用的


6.recv():用于接收远程连接发来的信息,并返回接收到的信息

当没有消息发来时会阻塞。

有一个整形参数:用于指定缓冲区的大小

同样这个方法也是要用套接字对象调用的


7.sendall():用于向远端发送消息    (用sendall代替send)

有一个整数:指定发送的对象或数据

同样这个方法也是要用套接字对象调用的


2.TCP服务端代码

import socket           #引入socket模块HOST = ''               #服务端不需要指定绑定的本地IP地址PORT = 8888             #指定端口号为 8888s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)    #创建套接字s.bind((HOST,PORT))                                     #绑定套接字s.listen(5)                                             #监听conn,addr = s.accept()                                  #等待客户端连接,有客户端连接则返回一个新的套接字来表示客户端print('Client\'s addr:',addr)                        #打印客户端的信息while True:                                           #循环接收来自服务端的信息    data = conn.recv(1024)                             #接收客户端的信息    if not data:        break    print('Receive data:',data.decode('utf-8'))    #打印客户端发来的信息,并以utf-8的编码方式来解码。(因为客户端是以UTF-8来编码的 )    conn.sendall(data)                                 #把收到的信息发回客户端conn.close()                                           #关闭套接字


3.TCP客户端编写过程


0.也需要引入 socket模块。 import socket

1.socket():上面已经说过了

2.connect():用于连接服务器

参数:接收一个元组,包含服务器的 IP地址 和 服务器指定的端口号

同样这个方法也是要用套接字对象调用的


3.recv()和send()和close()上面都说过了


4.客户端代码

import socketHOST = 'localhost'      #服务端的ip地址,但由于我是在同一台电脑测试,所以就用localhost这个宏PORT = 8888               #服务端指定的端口s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)        #创建套接字s.connect((HOST,PORT))                                      #连接服务端data=input("please enter data")                          #从键盘输出信息while data:    s.sendall(data.encode('utf-8'))    data = s.recv(512)    print('Receive data:\n',data.decode('utf-8'))    data = input('please enter data')s.close()




0 0