计算机网络实验:
要求:
实现服务器和客户机的交互
服务器显示:服务器、学号、姓名
客户机显示:客户机、学号、姓名
程序分析:实现服务器和客户机的交互
• 实现服务器和客户机的交互需要分别在服务器和服务器上执行程序。
• 服务器上程序负责开启并监听一个端口。
• 客户机上的程序负责连接到该端口并与之通信。
此实验使用python语言实现socket通信。
python代码:
!/usr/bin/env python
-- coding:utf-8 --
import socket
s = socket.socket()
host = ‘172.22.148.117’
port = 1286
s.connect((host,port)) #需要连接的服务器,端口。本次测试为同一台主机
print host
print “服务器名称是:”
print “IP地址是:172.22.148.117”
while True:
user_input = raw_input(‘请输入要传输的信息:’)
s.send(user_input) #send方法把信息传输给服务器端
Data = s.recv(1024) #recv方法用于接收数据,后面1024是每次接收数据的最大长度,可以自己设定
print Data #打印服务器端传输过来的内容
s.close() #关闭连接
!/usr/bin/env python
-- coding:utf8 -- #支持汉字
import socket #导入socket模块
s = socket.socket() #s等于socket模块中的socket类
host = ‘172.22.148.117’ #socket模块中gethostname()函数能够得到当前主机名
port = 1286 #端口
s.bind((host,port)) #使用bind方法后,在调用listen方法监听某个地址;
s.listen(5) #listen方法只有一个参数,表示服务器未处理的连接数(允许的排队长度)
c,addr = s.accept() #accept方法会返回一个格式为(client,address)的元组,client是客户端套接字,address是地址
print “Got connection from” , addr #打印出目前连接的地址
print “服务器名称是:”
print “IP地址是:172.22.148.117”
while True:
Data = c.recv(1024) #接收信息
if not Data:break #如果客户端传输过来的信息为空,关闭连接
print Data #打印客户端传来的信息
c.send(Data) #把客户端传来的信息传给客户端
s.close() #关闭套接字,可以把close写在循环外面,这样就可以一直通信,直到客户端主动断开