python_112_网络编程 Socket编程

 

实例1:客户端发小写英文,服务器端返回给客户端大写英文(仅支持一次接受发送)

服务器端:

#服务器端(先于客户端运行)
import socket
server=socket.socket()
server.bind(('localhost', 6969))#绑定要监听的端口,只能接受一个参数
server.listen()#监听

print('我要开始等电话了')
conn,addr=server.accept()#等电话打进来    conn:连接标记    addr:对方的地址
#conn就是客户端连过来而在服务器端为其生成的一个连接实例
print('conn:',conn)
print('addr:',addr)
print('电话来了')

data=conn.recv(1024)#接受数据    数据大小最好<=8192  recv默认是阻塞的
print('recv',data)
conn.send(data.upper())#返回一个值

server.close()

客户端:

#客户端
import socket

client=socket.socket()#声明协议(socket)类型,同时生成socket连接对象
client.connect(('localhost',6969))#连接,只能接受一个参数

client.send(b'hello world')#发送数据  注:python3中只能发byte类型,python2可以发字符串,byte(字节)类型
# 注:byte类型只能接受ascall码数据类型
# client.send('我要下载aaa片'.encode())#发送中文要这样写(英文也没问题)
data=client.recv(1024)#接受服务器端的返回,可以指定接受大小   这里我指定的是1024个字节
print('recv:',data)
# print('recv:',data.decode())#接受中文要这样写(英文也没问题)

client.close()

实例2:重复接受与发送(linux系统上操作最合适)

服务器端:

import socket
import os
sever=socket.socket()
sever.bind(('localhost',6969))
sever.listen(5)#5可以更换别的数字,这里指的是可以挂起5个客户端连接(异步通信时可以懂得),默认写5个
print('我要开始等电话了')

while True:
    coon, addr = sever.accept()
    print('coon:', coon)
    print('addr:', addr)

    while True:
        data=coon.recv(10240)
        print('recv',data)
        if not data:
            print('client has lost')
            break
        # res = os.popen(data).read()  # 获取执行结果,并执行命令(将socket模拟ssh客户端)
        # coon.send(res)#将send替换为sendall,表示循环发送send
        coon.send(data.upper())

sever.close()

客户端:

import socket
client=socket.socket()
client.connect(('localhost',6969))
while True:
    msg=input('>>:').strip()#注意发送不了空的,所以要用if语句
    if len(msg)==0:continue
    client.send(msg.encode('utf-8'))
    data=client.recv(1024)
    print(data.decode())

client.close()

  

  

posted @ 2018-03-30 12:16  耐烦不急  阅读(188)  评论(0编辑  收藏  举报