最近一直忙于实验,偶尔有机会练习了久久未接触到的Socket,以前学习的时候都是在.Net下,不过所有的Socket原理都是一样的,附上自己的代码(网上down的,自己调试而成)
服务器端:
# -*- coding: cp936 -*-
##tcp响应服务器,当与客户端建立连接后,服务器显示客户端ip和端口,同时将接收的客户端信息和'I get it!'传给客户端,此时等待输入一个新的信息传给客户端。
##@小五义
import socket,traceback
host=''
port=12345
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind((host,port))
s.listen(1)
while 1:
try:
clientsock,clientaddr=s.accept()
except KeyboardInterrupt:
raise
except:
traceback.print_exc()
continue
try:
print("连接来自:",clientsock.getpeername())
while 1:
data=clientsock.recv(4096).decode()
if not len(data):
break
print(clientsock.getpeername()[0]+':'+str(data))
clientsock.sendall(data.encode())
clientsock.sendall(("\nI get it!\n").encode())
t=input('input the word:')
clientsock.sendall(t.encode())
except (KeyboardInterrupt,SystemExit):
raise
except:
traceback.print_exc()
try:
clientsock.close()
except KeyboardInterrupt:
raise
except:
traceback.print_exc()
import socket,sys
port=12345
host=input('输入服务器ip:')
data=input('输入要发送的信息:')
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.connect((host,port))
except:
print('连接错误!')
s.send(data.encode())
s.shutdown(1)
print('发送完成。')
while 1:
buf=s.recv(4096).decode()
if not len(buf):
break
sys.stdout.write(buf)
1、跟其他的编译环境一样需要两个进程来分别执行服务器和客户端,也就是打开两个shell脚本
2、编码方式的问题。Socket发送的都是byte编码方式,而Python3使用的是Unicode编码方式,所以需要使用decode和encode函数转换
3、这个例子只是一个介绍函数作用的基础例子,实际用的时候肯定要进行功能扩展,把面向对象那一部分添加进去。
原文地址:http://blog.csdn.net/zhangzhengyi03539/article/details/44195443