python中建立具有TCP和流套接字的简单服务器的代码编写心得

简单描述:

建立服务器需要用到socket模块,一般来说需要6个步骤:

1.用socket创建套接字,语法格式如下:

socket.socket([family, [type, [protocol]]])

family一般有三种类型,AF_UNIX(用于同一台机器上的进程间通信),AF_INET(用于IPV4的TCP和UDP),AF_INET6(针对IPV6)

type有两种类型,一种是针对面向连接的协议(如TCP),一种是针对面向非连接的协议(如UDP),分为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报文套接字)

prototol一般不指定

2.将socket绑定到指定端口,用socket.bind((host, port))

3.指定服务器最大连接数a,a至少为1,用socket.listen(a)

4.等待客户请求一个连接,用connection, address=socket.accept(),服务器接受客户端连接请求后,accept方法将返回一个新的连接套接字对象

connection和客户端的ip地址address,后续服务器和客户端的通信将依靠新的套接字connection

5.服务器和客户端通过send和recv方法通信

6.传输结束,通过调用close方法关闭连接

具体代码实现如下:

其中后续使用了线程的知识来处理新建立的套接字对象(TCP)连接,这里不做讨论

! /usr/bin/python3

-- coding:UTF-8 --

import socket
import threading
import time

def socket_server():
#创建 socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#获取本地主机名
host = socket.gethostname()

port = 9999

#绑定端口
server_socket.bind((host, port))

#设置最大连接数, 超过后排队
server_socket.listen(5)

while True:
    #接受一个新连接
    sock, addr = server_socket.accept()
    #创建一个新线程
    t = threading.Thread(target=tcp_link, args=sock, addr)
    t.start()

def tcp_link(sock, addr):
print('Accept new connection from %s:%s...'%addr)
sock.send('欢迎学习python网络编程!'.encode('utf-8'))
while True:
data = sock.recv(1024)
time.sleep(1)
if not data or data.decode('utf-8') == 'exit':
break
sock.send('Hello,%s!'%data.decode('utf-8')).encode('utf-8')
sock.close()
print('Connection from %s:%s closed.'%addr)

def main():
socket_server()

if name == 'main':
main()

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 代码不好排版,可以到微信订阅号(xuanhun521)查看原文。 Python黑帽编程2.8套接字编程 套接字编程...
    玄魂阅读 676评论 1 2
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,267评论 4 16
  • 网络 理论模型,分为七层物理层数据链路层传输层会话层表示层应用层 实际应用,分为四层链路层网络层传输层应用层 IP...
    FlyingLittlePG阅读 871评论 0 0
  • ————纪念川西大地震10周年 时间过得真快 记忆却很模糊 让大脑好好的搜索一下 那一年的五月十二日 噩耗传来 全...
    野地百合花阅读 313评论 0 2
  • Sayings: 一直以来都想写出来的一个认知概念。 关于自由 作者:李雪含 自由这个词火起来好像是因为某人的一个...
    知乎李雪含阅读 1,408评论 0 0