socket编程之服务器和客户端

Posted pyming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket编程之服务器和客户端相关的知识,希望对你有一定的参考价值。

服务端和客户端就像银行出纳员和客户样,一个银行出纳员(服务器),不吃不睡的服务排队的客户,每个客户都会有要解决的问题,一旦完成,客户就会走开,出纳员等待下一个客户的到来。

服务器端:

from socket import *
from time import ctime

HOST =  ‘‘ #空白,是对bind方法的标识,可以使用任何可用的地址
PORT =  21567
BUFSIZ = 1024 #缓冲区大小设为1kb
ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM) #分配tcp协议套接字
tcpSerSock.bind(ADDR) #将套接字绑定到服务器地址
tcpSerSock.listen(5) #开启tcp监听器的调用

while True: #无限的循环,不断的监听
    print(waitting for connect)
    tcpCliSock, addr = tcpSerSock.accept() #等待客户端的连接
    print(...connect from: , addr)
    
    while True:
        data = tcpCliSock.recv(BUFSIZ)#接受客户端数据
        if not data:#如果消息为空,跳出本会话循环,等待另一个客户端连接
            break
        tcpCliSock.send(b[%s] %s %(bytes(ctime(), utf-8),data))#必须加b‘’否则还是str #如果得到消息则格式化返回数据并加上时间戳
    
    tcpCliSock.close()#并不会执行
tcpSerSock.close()#并不会执行
>>>
waitting for connect
 

客户端:

from socket import *

HOST =  127.0.0.1
PORT =  21567 #应与服务端相同
BUFSIZ = 1024 #大小也应该相同
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)#分配tcp客户端套接字
tcpCliSock.connect(ADDR)#主动调用并连接到服务器

while True:#无限循环,
    data = input(>)#输入数据
    if not data:#如果输入为空,则跳出循环
        break
    tcpCliSock.send(bytes(data, encoding = "utf8") )#发送的数据只能是bytes,用bytes(s, encoding=‘utf-8‘)将输入的str转为bytes #发送到服务器进行数据处理
    data = tcpCliSock.recv(BUFSIZ)#接受到服务器加工过的信息
    if not data:#如果调用失败则退出循环
            break
    print(data.decode(utf-8))#将bytes转为str #输出到屏幕
    
    
tcpCliSock.close()

>>>
[Thu Feb  8 16:51:49 2018] h
>hello lily
[Thu Feb  8 16:52:56 2018] hello lily
>你好
[Thu Feb  8 16:53:43 2018] 你好
>as long as you were happy
[Thu Feb  8 17:27:39 2018] as long as you were happy
 

 






以上是关于socket编程之服务器和客户端的主要内容,如果未能解决你的问题,请参考以下文章

Java编程基础之网络编程

PHP Socket 编程之9个主要函数的使用之测试案例

socket编程之服务器和客户端

Java Socket编程之TCP

Java语言 网络编程之Socket用法

网络编程基础之粘包现象