- 一、实验目的
- 二、实验环境
- 三、实验内容与要求
- 1、在局域网中,两个同学一组利用Pycharm实现TCP/IP(UDP)网络编程。
- 2、客户端利用pyqt5来实现与服务器端(控制台)的聊天通信。
- 效果截图
1.掌握使用TCP/IP来创建客户端和服务器。
2.掌握使用UDP来创建客户端和服务器。
计算机、Pycharm软件。
三、实验内容与要求 1、在局域网中,两个同学一组利用Pycharm实现TCP/IP(UDP)网络编程。(1)从客户端输入一个学生的 id 姓名 年龄 分数
(2)将其发送到服务端,由服务端写入到一个文件中
(3)每个信息占一行
(4)数据传输分别使用TCP和UDP套接字完成。
# 客户端 from socket import * import self as self class ss(object): def __init__(self, name, age, score, id): self.name = name self.age = age self.score = score self.id = id def __setitem__(self, k, v): self.k = v def kehu(self): h = 0 # 创建套接字 s = socket() # 服务器连接 server_addr = ('192.168.225.1', 1234) s.connect(server_addr) msg = input('客户端发送消息:') n = s.send(msg.encode()) while True: # 发送消息 # data = connfd.recv(1024) # msg = input('客户端发送消息:') # n = s.send(msg.encode()) data = s.recv(1024) print("来自服务端的消息:", data.decode()) ss.id = input('请输入id:') msg1 = ss.id # n = connfd.send(msg1.encode()) n = s.send(msg1.encode()) if not msg1: break ss.name = str(input('亲输入你的名字:')) msg2 = ss.name # n = connfd.send(msg2.encode()) n = s.send(msg2.encode()) if not msg2: break ss.age = input('请输入age:') msg3 = ss.age # n = connfd.send(msg3.encode()) n = s.send(msg3.encode()) if not msg3: break ss.score = input('请输入成绩:') msg4 = ss.score # n = connfd.send(msg4.encode()) n = s.send(msg4.encode()) if not msg4: break s.close() a=ss a.kehu(self) # 服务器端 import socket h = 0 a = [] # 创建套接字 sockfd = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定地址 sockfd.bind(('192.168.225.1', 1234)) # 队列 sockfd.listen(85) # 等待连接 print("wait...") connfd, addr = sockfd.accept() # 发送,接收消息 # msg = input('服务器发送消息:') # n = connfd.send(msg.encode()) data = connfd.recv(1024) print('接收到客户端的消息:', data.decode()) while True: msg = input('服务器发送消息:') n = connfd.send(msg.encode()) if not msg: break f = open('test.txt', 'a') # f.write(' 姓名 年龄 分数 学号') # if not msg: # break i = 0 while True: if i >= 4: break else: data = connfd.recv(1024) msg = data.decode() a.append(msg) i = i + 1 print('id:{0} name:{1} age:{2} score:{3}'.format(a[4 * h + 0], a[4 * h + 1], a[4 * h + 2], a[4 * h + 3])) f.write('n') f.write(str('%d. %s %s %s %s' % (h+1, a[4 * h + 0], a[4 * h + 1], a[4 * h + 2], a[4 * h + 3]))) h = h + 1 f.close() sockfd.close()2、客户端利用pyqt5来实现与服务器端(控制台)的聊天通信。
具体要求如下:
(1)通过pyqt5创建聊天程序客户端,点击设置连接按钮,和服务器端连接,点击发送按钮,将用户名和发送的消息发送给客户端和文本框内显示,服务器端发送的消息,点击接收按钮,在文本框内显示,如下图所示。
可以类似,但是不唯一
(2)利用TCP协议建立通信,服务器端控制台来循环接收和输入消息,在控制台输出的消息,显示在客户端界面上。将服务器端和客户端的内容存储在数据库的表中。
#客户端 from PyQt5 import QtWidgets, QtCore import pymysql from qq_ import Ui_MainWindow from socket import * # 创建套接字 s = socket() db = pymysql.connect(host='localhost', port=3306, user='root', passwd='qwe151314', database='stu_info', charset='utf8') class Ui_main(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self): super(Ui_main, self).__init__() self.setupUi(self) self.pushButton.clicked.connect(lambda: {self.cl(), self.stackedWidget.setCurrentIndex(1)}) self.pushButton_2.clicked.connect(lambda: {QtWidgets.QApplication.quit()}) self.pushButton_3.clicked.connect(lambda: {self.shot()}) self.pushButton_4.clicked.connect(lambda: {self.sl(), QtWidgets.QApplication.quit()}) self.pushButton_5.clicked.connect(lambda: {self.textEdit.clear()}) def cl(self): # 服务器连接 server_addr = ('192.168.225.1', 1234) s.connect(server_addr) self.textEdit.append("连接成功!") def sl(self): s.close() def shot(self): msg = self.lineEdit.text() n = s.send(msg.encode()) # h = "self.lineEdit_2.text()':'self.lineEdit.text()" h = self.lineEdit_2.text() self.textEdit.append(h + ":" + msg) # 接收 data = s.recv(1024) # print("来自服务端的消息:", data.decode()) self.textEdit.append("服务端:"+data.decode()) j = data.decode() # 获取游标,创建游标对象 cur = db.cursor() # 数据 *** 作, db.ping(reconnect=True) # print(data) # print(j) cur.execute("insert into client values ('%s','%s');" % (msg, j)) # cur.execute("insert into client values ('%d','%s','%d','%d');" % (id, name, age, score)) print(msg) # 将修改内容提交到数据库 db.commit() # 关闭游标和数据库连接 cur.close() db.close() if __name__ == "__main__": import sys QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) # 使窗体按照Qt设计显示 app = QtWidgets.QApplication(sys.argv) window = Ui_main() window.show() sys.exit(app.exec_()) #服务器 # main 服务器端 import socket # 创建套接字 sockfd = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定地址 sockfd.bind(('192.168.225.1', 1234)) # 队列 sockfd.listen(85) # 等待连接 print("wait...") connfd, addr = sockfd.accept() while True: data = connfd.recv(1024) # print('接收到客户端的消息:', data.decode()) if not data: break if data: # msg = input('服务器发送消息:') n = connfd.send('合适'.encode())效果截图
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)