《网络编程》实验报告案例
- 格式:pdf
- 大小:399.40 KB
- 文档页数:5
⽹络编程实验报告程序实践报告⼀、程序实践概述1、题⽬名称:Linux程序设计基础2、时间进度:2012年6⽉19⽇到2012年7⽉5⽇3、开发环境:Ubunto 10.04⼆、问题分析1、功能说明:①编程实现快速排序算法;②实现⽂本⽂件拷贝函数copy(f_source, f_target);即实现如下功能:$ ./copy f1 f2以上程序执⾏后当前⽬录会形成⼀个新的⽂件f2,且其内容与f1完全⼀致。
③编写⼀个程序,要求:输⼊N个学⽣的学号和成绩,并保存在stu.txt⽂本⽂件中,对学⽣成绩进⾏排序并把排序后的结果输出到score.txt⽂件中,同时在屏幕上输出⾼于平均成绩的学⽣的学号和成绩。
④编写⼀个程序找出串str1和串str2的所有最长公共⼦串。
2、解决⽅案:(1)将原问题分解为若⼲个规模更⼩但结构与原问题相似的⼦问题。
递归地解这些⼦问题,然后将这些⼦问题的解组合为原问题的解。
(2)定义⽂件指针FILE *fp;表⽰fp是指向FILE结构的指针变量,通过fp 即可找存放某个⽂件信息的结构变量,然后按结构变量提供的信息找到该⽂件,实施对⽂件的操作。
(3)创建⼀个结构体储存学⽣的学号和成绩,利⽤⽂件操作写⼊⽂档。
对成绩进⾏排序,将⼤于平均成绩的输出到屏幕。
(4)创建两个数组,搜索字符串,寻找最⼤的匹配⼦串。
三、⽅案设计1、模块结构:模块功能图和模块描述(1)在a[left..right]中任选⼀个记录作为基准,以此基准将当前⽆序区划分为左、右两个较⼩的⼦区间a[left..pivotpos-1)和a[pivotpos+1..right],并使左边⼦区间中所有记录的关键字均⼩于等于基准记录(不妨记为pivot)的关键字pivot.key,右边的⼦区间中所有记录的关键字均⼤于等于pivot.key,⽽基准记录pivot则位于正确的位置(pivotpos)上,它⽆须参加后续的排序。
划分的关键是要求出基准记录所在的位置pivotpos。
网络编程实验报告实验一TCP Socket API程序设计一、预备知识1.网络编程基本概念网络上的计算机间的通讯,实质上是网络中不同主机上的程序之间的通讯。
在互联网中使用IP地址来标识不同的主机,在网络协议中使用端口号来标识主机上不同进程,即使用(IP地址,端口号)二元组。
套接字(Socket)用于描述IP地址和端口,是一个通信链的句柄,通信时一个网络程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过与网络接口卡相连的传输介质将这段信息发送到另一台主机的Socket中,以供其他程序使用。
图1-1 TCP通信流程2.TCP通信流程TCP程序是面向连接的,程序运行后,服务器一直处于监听状态,客户端与服务器通信之前必须首先发起连接请求,由服务器接收请求并在双方之间建立连接后才可以互相通信。
二、实验目的1.了解Winsock API编程原理;2.掌握TCP Socket程序的编写;3.了解C/S模式的特点;4.学会解决实验中遇到的问题。
三、实验任务使用Winsock API相关类实现TCP Socket通信程序,并能成功运行。
四、实验环境及工具1. Windows2000/XP/72. Visual C++开发平台3. Visual Studio2010五、实验内容和步骤参照《Visual C++网络编程教程》书中81页,TCP Socket API 程序设计。
连接:void CChatClientDlg::OnConnect(){WSADATA wsd; //WSADATA结构WSAStartup(MAKEWORD(2,2),&wsd); //加载协议,使用Winsock 2.2版m_client = socket(AF_INET,SOCK_STREAM,0); //创建流式套接字//服务器地址sockaddr_in serveraddr;UpdateData();if(ServerIP.IsBlank()){AfxMessageBox("请指定服务器IP!");return;}if(sPort.IsEmpty()){AfxMessageBox("请指定端口!");return;}//获取服务器进程的IP和端口BYTE nFild[4];CString sIP;ServerIP.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]);sIP.Format("%d.%d.%d.%d",nFild[0],nFild[1],nFild[2],nFild[3]);//设置服务器地址结构的内容serveraddr.sin_family = AF_INET;serveraddr.sin_addr.S_un.S_addr = inet_addr(sIP);serveraddr.sin_port = htons(atoi(sPort));//发起连接须指明要访问的服务器进程地址,这个地址存储在serveraddr中if(connect(m_client,(sockaddr*)&serveraddr,sizeof(serveraddr)) ! = 0){MessageBox("连接失败");return;}else{m_ListWords.AddString("连接服务器成功!");m_ListWords.SetT opIndex(m_ListWords.GetCount() - 1);}WSAAsyncSelect(m_client,m_hWnd,10000,FD_READ|FD_CLO SE); //①//界面完善ServerIP.EnableWindow(false);ServerPort.EnableWindow(false);m_ButtonConnect.EnableWindow(false);m_ButtonDisconnect.EnableWindow();m_EditWords.EnableWindow();m_ButtonSend.EnableWindow();m_ButtonExit.EnableWindow(false);m_ButtonClear.EnableWindow();}“断开”按钮的事件过程代码如下:void CChatClientDlg::OnDisconnect(){//断开与服务器的连接closesocket(m_client);m_ListWords.AddString("从服务器断开");m_ListWords.SetT opIndex(m_ListWords.GetCount() - 1);ServerIP.EnableWindow();ServerPort.EnableWindow();m_ButtonConnect.EnableWindow();m_ButtonDisconnect.EnableWindow(false);m_EditWords.EnableWindow(false);m_ButtonSend.EnableWindow(false);m_ButtonExit.EnableWindow();}“发送”按钮事件过程代码如下:void CChatClientDlg::OnSend(){//向服务器发送信息UpdateData();if(m_sWords.IsEmpty()){AfxMessageBox("发送的消息不能为空!");return;}//开始发送数据int i = send(m_client,m_sWords.GetBuffer(0),m_sWords.GetLength(),0);m_ListWords.AddString("发送:" + m_sWords);m_ListWords.SetT opIndex(m_ListWords.GetCount() - 1);}BOOL CChatClientDlg::PreTranslateMessage(MSG* pMsg){if(pMsg->message == 10000) //识别应用程序中定义的消息号{switch(pMsg->lParam) //判断网络事件类型{case FD_READ:this->ReceiveData(); //若为FD_READ则接收数据break;case FD_CLOSE:this->CloseSock(); //如果服务端断开,客户端也断开break;}}elsereturn CDialog::PreTranslateMessage(pMsg);}下面来实现ReceiveData()和CloseSock()方法。
《网络编程》实验报告实验序号:05 实验项目名称:JDBC连接学号姓名专业、班20网络工程实验地点指导教师实验时间2022一、实验目的及要求1、利用JDBC实现对Acess数据库文件的操作2、利用JDBC实现对MySQL数据库文件的操作二、实验设备(环境)及要求一台Windows XP、JDK1.6、MyEclipse 8.5三、实验内容与步骤1、建立ODBC数据源:建立T_STUDENT表;2、添加数据、删除数据:PreparedStatement,CallableStatement四、实验结果与数据处理Access数据库使用连接池访问数据库1.添加数据:结果:2.删除数据:结果:MySQL数据库1、添加数据:<%@ page language="java" import="java.sql.*" pageEncoding="utf-8"%><html><body><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection conn = DriverManager.getConnection("jdbc:odbc:DSSchool");Statement stat = conn.createStatement();String sql = "INSERT INTO T_STUDENT(STUNO,STUNAME,STUSEX)VALUES('0032','fengjiang','man')";int i = stat.executeUpdate(sql);out.println("成功添加" + i + "行");stat.close();conn.close();%></body></html>2、删除数据:<%@ page language="java" import="java.sql.*" pageEncoding="utf-8"%><html><body><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection conn = DriverManager.getConnection("jdbc:odbc:DSSchool");Statement stat = conn.createStatement();String sql = "DELETE FROM T_STUDENT WHERE STUNO='0032'";int i = stat.executeUpdate(sql);out.println("成功删除" + i + "行");stat.close();conn.close();%></body></html>结果:3、修改数据:<%@ page language="java" import="java.sql.*" pageEncoding="utf-8"%><html><body><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection conn = DriverManager.getConnection("jdbc:odbc:DSSchool");Statement stat = conn.createStatement();String sql = "UPDATE T_STUDENT SET STUSEX='女' WHERE STUNO='0007'";int i = stat.executeUpdate(sql);out.println("成功修改" + i + "行");stat.close();conn.close();%></body></html>结果:4、查询数据:<%@ page language="java" import="java.sql.*" pageEncoding="utf-8"%><html><body><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection conn = DriverManager.getConnection("jdbc:odbc:DSSchool");Statement stat = conn.createStatement();String sql = "SELECT STUNO,STUNAME FROM T_STUDENT WHERE STUSEX='女'";ResultSet rs = stat.executeQuery(sql);while(rs.next()){String stuno = rs.getString("STUNO");String stuname = rs.getString("STUNAME");out.println(stuno + " " + stuname + "<BR>");}stat.close();conn.close();%></body></html>结果:附源程序清单:添加数据:<%@ page language="java"import="java.sql.*"pageEncoding="utf-8"%> <html><body><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection conn =DriverManager.getConnection("jdbc:odbc:DSSchool");Statement stat = conn.createStatement();String sql = "INSERT INTO T_STUDENT(STUNO,STUNAME,STUSEX) VALUES('0032','fengjiang','man')";int i = stat.executeUpdate(sql);out.println("成功添加" + i + "行");stat.close();conn.close();%></body></html>删除数据:<%@ page language="java"import="java.sql.*"pageEncoding="utf-8"%> <html><body><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection conn =DriverManager.getConnection("jdbc:odbc:DSSchool");Statement stat = conn.createStatement();String sql = "DELETE FROM T_STUDENT WHERE STUNO='0032'";int i = stat.executeUpdate(sql);out.println("成功删除" + i + "行");conn.close();%></body></html>修改数据:<%@ page language="java"import="java.sql.*"pageEncoding="utf-8"%> <html><body><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection conn =DriverManager.getConnection("jdbc:odbc:DSSchool");Statement stat = conn.createStatement();String sql = "UPDATE T_STUDENT SET STUSEX='女' WHERE STUNO='0007'";int i = stat.executeUpdate(sql);out.println("成功修改" + i + "行");stat.close();conn.close();%></body></html>查询数据<%@ page language="java"import="java.sql.*"pageEncoding="utf-8"%> <html><body><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection conn =DriverManager.getConnection("jdbc:odbc:DSSchool");Statement stat = conn.createStatement();String sql = "SELECT STUNO,STUNAME FROM T_STUDENT WHERE STUSEX='女'";ResultSet rs = stat.executeQuery(sql);while(rs.next()){String stuno = rs.getString("STUNO");String stuname = rs.getString("STUNAME");out.println(stuno + " " + stuname + "<BR>");}conn.close(); %></body></html>。
一、实验目的1. 熟练掌握网络编程的基本原理和常用技术。
2. 掌握TCP/IP协议族中的TCP和UDP协议的使用方法。
3. 学会使用套接字编程实现网络通信。
4. 培养团队协作和问题解决能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:C语言3. 网络编程库:Winsock三、实验内容本次实验分为三个部分,分别为:1. TCP客户端/服务器模型2. UDP客户端/服务器模型3. 文件传输四、实验步骤及代码实现1. TCP客户端/服务器模型(1)服务器端代码:```c#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")#define PORT 8080int main() {WSADATA wsaData;SOCKET serverSocket, clientSocket;struct sockaddr_in serverAddr, clientAddr;int addrLen = sizeof(clientAddr);char buffer[1024];// 初始化WinsockWSAStartup(MAKEWORD(2, 2), &wsaData);// 创建套接字serverSocket = socket(AF_INET, SOCK_STREAM, 0);if (serverSocket == INVALID_SOCKET) {printf("Socket创建失败:%d\n", WSAGetLastError());return 1;}// 设置服务器地址memset(&serverAddr, 0, sizeof(serverAddr));serverAddr.sin_family = AF_INET;serverAddr.sin_addr.s_addr = INADDR_ANY;serverAddr.sin_port = htons(PORT);// 绑定套接字if (bind(serverSocket, (struct sockaddr)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) {printf("绑定失败:%d\n", WSAGetLastError());closesocket(serverSocket);WSACleanup();return 1;}// 监听套接字listen(serverSocket, 5);// 接受客户端连接clientSocket = accept(serverSocket, (struct sockaddr)&clientAddr, &addrLen);if (clientSocket == INVALID_SOCKET) {printf("接受失败:%d\n", WSAGetLastError());closesocket(serverSocket);WSACleanup();return 1;}// 接收客户端数据while (1) {memset(buffer, 0, sizeof(buffer));int recvLen = recv(clientSocket, buffer, sizeof(buffer), 0);if (recvLen > 0) {printf("接收到的数据:%s\n", buffer);} else if (recvLen == 0) {printf("客户端已断开连接\n");break;} else {printf("接收失败:%d\n", WSAGetLastError());break;}}// 关闭套接字closesocket(clientSocket);closesocket(serverSocket);WSACleanup();return 0;}```(2)客户端代码:```c#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")#define PORT 8080int main() {WSADATA wsaData;SOCKET clientSocket;struct sockaddr_in serverAddr;char buffer[1024];// 初始化WinsockWSAStartup(MAKEWORD(2, 2), &wsaData);// 创建套接字clientSocket = socket(AF_INET, SOCK_STREAM, 0);if (clientSocket == INVALID_SOCKET) {printf("Socket创建失败:%d\n", WSAGetLastError());return 1;}// 设置服务器地址memset(&serverAddr, 0, sizeof(serverAddr));serverAddr.sin_family = AF_INET;serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");serverAddr.sin_port = htons(PORT);// 连接服务器if (connect(clientSocket, (struct sockaddr)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) {printf("连接失败:%d\n", WSAGetLastError());closesocket(clientSocket);WSACleanup();return 1;}// 发送数据char data = "Hello, server!";send(clientSocket, data, strlen(data), 0);// 关闭套接字closesocket(clientSocket);WSACleanup();return 0;}```2. UDP客户端/服务器模型(1)服务器端代码:```c#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")#define PORT 8080int main() {WSADATA wsaData;SOCKET serverSocket;struct sockaddr_in serverAddr, clientAddr;int addrLen = sizeof(clientAddr);char buffer[1024];// 初始化WinsockWSAStartup(MAKEWORD(2, 2), &wsaData);// 创建套接字serverSocket = socket(AF_INET, SOCK_DGRAM, 0);if (serverSocket == INVALID_SOCKET) {printf("Socket创建失败:%d\n", WSAGetLastError()); return 1;}// 设置服务器地址memset(&serverAddr, 0, sizeof(serverAddr));serverAddr.sin_family = AF_INET;serverAddr.sin_addr.s_addr = INADDR_ANY;serverAddr.sin_port = htons(PORT);// 绑定套接字if (bind(serverSocket, (struct sockaddr)&serverAddr,sizeof(serverAddr)) == SOCKET_ERROR) {printf("绑定失败:%d\n", WSAGetLastError());closesocket(serverSocket);WSACleanup();return 1;}// 接收客户端数据while (1) {memset(buffer, 0, sizeof(buffer));int recvLen = recvfrom(serverSocket, buffer, sizeof(buffer), 0, (struct sockaddr)&clientAddr, &addrLen);if (recvLen > 0) {printf("接收到的数据:%s\n", buffer);} else {printf("接收失败:%d\n", WSAGetLastError());break;}}// 关闭套接字closesocket(serverSocket);WSACleanup();return 0;}```(2)客户端代码:```c#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")#define PORT 8080int main() {WSADATA wsaData;SOCKET clientSocket;struct sockaddr_in serverAddr;char buffer[1024];// 初始化WinsockWSAStartup(MAKEWORD(2, 2), &wsaData);// 创建套接字clientSocket = socket(AF_INET, SOCK_DGRAM, 0);if (clientSocket == INVALID_SOCKET) {printf("Socket创建失败:%d\n", WSAGetLastError()); return 1;}// 设置服务器地址memset(&serverAddr, 0, sizeof(serverAddr));serverAddr.sin_family = AF_INET;serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");serverAddr.sin_port = htons(PORT);// 发送数据char data = "Hello, server!";sendto(clientSocket, data, strlen(data), 0, (struct sockaddr)&serverAddr, sizeof(serverAddr));// 关闭套接字closesocket(clientSocket);WSACleanup();return 0;}```3. 文件传输(1)服务器端代码:```c#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")#define PORT 8080int main() {WSADATA wsaData;SOCKET serverSocket, clientSocket;struct sockaddr_in serverAddr, clientAddr;int addrLen = sizeof(clientAddr);char buffer[1024];// 初始化WinsockWSAStartup(MAKEWORD(2, 2), &wsaData);// 创建套接字serverSocket = socket(AF_INET, SOCK_STREAM, 0);if (serverSocket == INVALID_SOCKET) {printf("Socket创建失败:%d\n", WSAGetLastError());return 1;}// 设置服务器地址memset(&serverAddr, 0, sizeof(serverAddr));serverAddr.sin_family = AF_INET;serverAddr.sin_addr.s_addr = INADDR_ANY;serverAddr.sin_port = htons(PORT);// 绑定套接字if (bind(serverSocket, (struct sockaddr)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) {printf("绑定失败:%d\n", WSAGetLastError());closesocket(serverSocket);WSACleanup();return 1;}// 监听套接字listen(serverSocket, 5);// 接受客户端连接clientSocket = accept(serverSocket, (struct sockaddr)&clientAddr, &addrLen);if (clientSocket == INVALID_SOCKET) {printf("接受失败:%d\n", WSAGetLastError());closesocket(serverSocket);WSACleanup();return 1;}// 接收文件名memset(buffer, 0, sizeof(buffer));int recvLen = recv(clientSocket, buffer, sizeof(buffer), 0);if (recvLen > 0) {char filename = buffer;FILE fp = fopen(filename, "wb");if (fp == NULL) {printf("文件打开失败:%s\n", filename);closesocket(clientSocket);closesocket(serverSocket);WSACleanup();return 1;}// 读取文件内容并发送到客户端while (1) {memset(buffer, 0, sizeof(buffer));recvLen = recv(clientSocket, buffer, sizeof(buffer), 0); if (recvLen > 0) {fwrite(buffer, 1, recvLen, fp);} else if (recvLen == 0) {printf("客户端已断开连接\n");break;} else {printf("接收失败:%d\n", WSAGetLastError());break;}}// 关闭文件和套接字fclose(fp);closesocket(clientSocket);closesocket(serverSocket);WSACleanup();}return 0;}```(2)客户端代码:```c#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")#define PORT 8080int main() {WSADATA wsaData;SOCKET clientSocket;struct sockaddr_in serverAddr;char buffer[1024];char filename = "example.txt";// 初始化WinsockWSAStartup(MAKEWORD(2, 2), &wsaData);// 创建套接字clientSocket = socket(AF_INET, SOCK_STREAM, 0);if (clientSocket == INVALID_SOCKET) {printf("Socket创建失败:%d\n", WSAGetLastError()); return 1;}// 设置服务器地址memset(&serverAddr, 0, sizeof(serverAddr));serverAddr.sin_family = AF_INET;serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");serverAddr.sin_port = htons(PORT);// 连接服务器if (connect(clientSocket, (struct sockaddr)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) {printf("连接失败:%d\n", WSAGetLastError());closesocket(clientSocket);WSACleanup();return 1;}// 发送文件名send(clientSocket, filename, strlen(filename), 0);// 打开文件FILE fp = fopen(filename, "rb");if (fp == NULL) {printf("文件打开失败:%s\n", filename);closesocket(clientSocket);WSACleanup();return 1;}// 读取文件内容并发送到服务器while (1) {memset(buffer, 0, sizeof(buffer));int readLen = fread(buffer, 1, sizeof(buffer), fp);if (readLen > 0) {send(clientSocket, buffer, readLen, 0);} else if (readLen == 0) {printf("文件读取完毕\n");break;} else {printf("文件读取失败:%d\n", WSAGetLastError());break;}}// 关闭文件和套接字fclose(fp);closesocket(clientSocket);WSACleanup();return 0;}```五、实验总结本次实验通过编写TCP和UDP客户端/服务器模型,以及文件传输程序,掌握了网络编程的基本原理和常用技术。
网络编程实验报告网络编程实验报告引言网络编程是计算机科学领域中的一个重要分支,它涉及到计算机网络的通信原理、网络协议以及数据传输等方面的知识。
本次实验旨在通过实际操作,加深对网络编程的理解,并掌握基本的网络编程技巧。
一、实验目的本次实验的主要目的是通过使用Python语言进行网络编程,实现一个简单的客户端和服务器端的通信。
通过这个实验,我们可以了解到网络编程的基本原理和技术,以及如何利用网络编程实现不同计算机之间的数据传输。
二、实验环境本次实验使用的是Python 3.9版本,并且需要安装socket模块。
在实验开始之前,我们需要确保计算机上已经正确安装了Python环境,并且能够正常运行Python程序。
三、实验过程1. 创建服务器端首先,我们需要创建一个服务器端的程序,用于接收来自客户端的请求并进行处理。
在Python中,可以使用socket模块来实现服务器端的功能。
具体的代码如下:```pythonimport socket# 创建一个socket对象s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定IP地址和端口号s.bind(('127.0.0.1', 8888))# 监听端口s.listen(5)# 等待客户端连接while True:# 接受一个新连接client_socket, addr = s.accept()# 接收客户端发送的数据data = client_socket.recv(1024)# 处理数据response = "Hello, " + data.decode()# 发送响应数据给客户端client_socket.send(response.encode())# 关闭连接client_socket.close()```2. 创建客户端接下来,我们需要创建一个客户端的程序,用于向服务器端发送请求并接收响应。
一、实验目的1. 理解网络编程的基本原理和概念。
2. 掌握TCP/IP协议的基本工作原理。
3. 学会使用Socket编程实现网络通信。
4. 增强实际操作能力,提高网络编程水平。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm4. 网络环境:校园局域网三、实验内容本次实验主要实现一个基于TCP协议的简单网络通信程序,包括客户端和服务器端。
1. 服务器端服务器端负责监听客户端的连接请求,接收客户端发送的数据,并回显给客户端。
```pythonimport socket# 创建socket对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 获取本地主机名host = socket.gethostname()port = 12345# 绑定端口server_socket.bind((host, port))# 设置最大连接数,超过后排队server_socket.listen(5)print("等待客户端连接...")while True:# 建立客户端连接client_socket, addr = server_socket.accept()print("连接地址:", addr)while True:# 接收客户端数据data = client_socket.recv(1024)if not data:break# 发送数据回客户端client_socket.send(data)# 关闭连接client_socket.close()```2. 客户端客户端负责向服务器端发送数据,并接收服务器端回显的数据。
```pythonimport socket# 创建socket对象client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 获取本地主机名host = socket.gethostname()port = 12345# 连接服务器client_socket.connect((host, port))# 发送数据client_socket.send("Hello, Server!")# 接收数据data = client_socket.recv(1024)print("从服务器接收到的数据:", data)# 关闭连接client_socket.close()```四、实验步骤1. 编写服务器端代码,并运行程序。
简单的聊天室程序电子信息系1 设计目的综合运用本课程及计算机网络的相关知识设计并实现一个网络应用程序,以Visual C++作为开发平台,通过实践复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力。
2 实验要求采用客户/服务器模式,分为客户端程序和服务器端程序。
服务器采用WINSOCK I/O 模型中的任一种,支持多个客户同时在线聊天。
客户端程序和服务器程序通过网络交换聊天字符串内容,服务器窗口的列表框中显示当前在线用户,支持客户端之间的私聊(可以通过服务器中转,或考虑UDP打洞直接建立端端连接)。
实验要求设计并编程完成两个方面的内容:首先建立一个使用TCP协议的聊天室服务器,这个服务器可以同时支持多个用户的在线聊天;其次设计一个可以和服务器通信的聊天室客户端。
3 功能要求✧支持多个客户端的连接,在服务器和多个客户端之间进行数据传输;✧接收客户端发送的消息,并显示在一个列表框中;✧在用户连接上后有提示,显示出连接的用户名字;✧发送信息时可以显示聊天的所有记录;4 系统主要功能和主要功能描述:服务器端聊天程序必须能够做3件事情:(1)服务器聊天程序要在待定的端口上等待来自聊天客户的连接请求,并且需要维护一个客户连接表,以记录所有成功的连接。
(2)服务器聊天程序要及时接受从各个聊天客户发送过来的信息,然后把这些信息转发到一个或多个客户连接。
对于公共聊天室,服务器将把接受到的信息向除源端外的所有客户发送过去。
(3)服务器还要监控这些连接的状态,在客户主动离开或发生故障时从列表中删除相应的表项,并及时更新连接表。
这些要求可以通过CSocket类提供的功能实现。
从CSocket派生出两个类CListenSocket和CClientSocket,它们分别用来侦听客户的连接请求和建立与客户的连接。
服务器只需要一个侦听套接字CListenSocket,然后根据客户的连接请求动态创建客户套接字CClientSocket。
计算机网络编程实验报告院系:专业:班级:
实验内容
开发一个简单的基于UDP协议的网络呼叫应答及时提醒系统。
程序运行后,系统自动弹出一个逐渐变大的动画窗体,同时自动在屏幕右下方(即任务栏内)显示一个托盘图标。
窗体变化到最大程度后的界面效果如图8-3所示。
用户关闭窗体后,窗体消失,但并不结束程序运行。
关闭窗体后,如果用户双击系统托盘图标,系统仍然会自动弹出与启动程序时效果相同的逐渐变大的动画窗体。
如果用户用鼠标右键单击本系统的托盘,系统会自动弹出一个快捷菜单,菜单中提供“呼叫对方”和“退出程序”两个功能,托盘和快捷菜单运行效果如图8-4所示。
系统弹出快捷菜单后,如果用户选择“呼叫对方”,则程序自动弹出动画窗体,并向接收方发出自己的IP地址和呼叫信息;如果用户选择“退出程序”,则结束整个系统运行。
程序运行后,系统会自动创建一个线程在端口8001监听网络呼叫信息,当接收到某人呼叫时,弹出一个对话框,提示呼叫方发送的信息。
实验总结通过本次实验,我练习了UDP应用编程的方法,也基本掌握了动画窗体的设计方法以及基本练习了自动显示和隐藏窗体的方法,通过实验步骤,我学习了系统托盘的设计方法。
托盘图标
快捷菜单
图8-4 屏幕右下方显示的托盘图标图8-3 呼叫窗体。
一、实验目的1. 理解网络编程的基本原理和概念。
2. 掌握TCP/IP协议栈的基本工作原理。
3. 学习使用Socket编程实现网络通信。
4. 熟悉网络编程中的多线程编程技术。
5. 提高实际编程能力和问题解决能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 20194. 网络编程库:Winsock三、实验内容1. 网络编程基础2. Socket编程3. 多线程编程4. 客户端-服务器模式四、实验步骤1. 网络编程基础(1)了解网络编程的基本概念,如IP地址、端口号、协议等。
(2)学习TCP/IP协议栈的工作原理,包括OSI七层模型和TCP/IP四层模型。
2. Socket编程(1)学习Socket编程的基本原理,包括Socket创建、连接、发送、接收和关闭等操作。
(2)编写一个简单的TCP客户端程序,实现与服务器端的通信。
(3)编写一个简单的TCP服务器程序,接收客户端的连接请求,并实现数据交互。
3. 多线程编程(1)学习多线程编程的基本原理,了解线程、进程、并发和同步等概念。
(2)在客户端程序中添加多线程,实现同时与多个服务器进行通信。
(3)在服务器程序中添加多线程,实现同时处理多个客户端的连接请求。
4. 客户端-服务器模式(1)实现一个简单的文件传输客户端,实现文件的发送和接收。
(2)实现一个简单的文件传输服务器,接收客户端的文件传输请求,并完成文件传输。
五、实验结果与分析1. 网络编程基础通过学习网络编程基础,我们了解了网络编程的基本概念和TCP/IP协议栈的工作原理,为后续的Socket编程打下了基础。
2. Socket编程(1)通过编写TCP客户端程序,实现了与服务器端的通信,验证了Socket编程的基本原理。
(2)通过编写TCP服务器程序,接收客户端的连接请求,并实现了数据交互,进一步巩固了Socket编程的知识。
3. 多线程编程通过在客户端和服务器程序中添加多线程,实现了同时与多个服务器进行通信和同时处理多个客户端的连接请求,提高了程序的并发处理能力。
华北科技学院计算机系综合性实验实 验 报 告课程名称网络编程实验学期 2011 至 2012 学年 第 1 学期 学生所在系部计算机系年级 09级专业班级计算机应用学生姓名孙 岩学号 ************任课教师黄江兰实验成绩计算机系制《 网络编程B 》课程综合性实验报告开课实验室: 基础实验室 2011年 12 月 9日实验题目聊天室的设计聊天室的设计一、实验目的1、掌握 内部控件的应用。
内部控件的应用。
2、掌握 内部对象的应用。
内部对象的应用。
3、Application 对象的深入应用。
对象的深入应用。
4、掌握数据库的建立、连接与数据的存取。
、掌握数据库的建立、连接与数据的存取。
5、掌握网页开发的基本流程。
、掌握网页开发的基本流程。
二、设备与环境硬件:多媒体计算机硬件:多媒体计算机软件:软件:Windows XP Windows XP 操作系统、操作系统、Visual 2005Visual 2005集成开发环境集成开发环境三、实验内容1、简单文字聊天室的需求分析。
、简单文字聊天室的需求分析。
2、系统的功能模块设计,功能模块框图。
、系统的功能模块设计,功能模块框图。
3、数据库的设计。
、数据库的设计。
4、系统的详细设计,统计在线人数、实现私聊等功能。
、系统的详细设计,统计在线人数、实现私聊等功能。
5、应用到的关键技术的详细说明。
、应用到的关键技术的详细说明。
四、实验结果及分析 1、系统功能分析本系统主要包括如下功能:本系统主要包括如下功能: (1)用户权限:)用户权限:登录:老用户的登录。
登录:老用户的登录。
注册:实现新用户的注册。
注册:实现新用户的注册。
聊天:实现信息的交流,并显示说话者的姓名及发送消息的时间。
聊天:实现信息的交流,并显示说话者的姓名及发送消息的时间。
统计在线人数:统计已登陆者的数量。
统计在线人数:统计已登陆者的数量。
(2)系统功能模块图如下图所示:)系统功能模块图如下图所示:2、数据库设计系统选用ACCESS 数据库,建立一个用户信息数据表。
一、实验目的1. 掌握网络编程的基本概念和原理。
2. 熟悉常用的网络编程工具和技术。
3. 能够编写简单的网络通信程序。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发工具:Visual Studio 20194. 网络编程库:Winsock三、实验内容本次实验主要涉及以下几个方面的内容:1. Winsock编程基础2. TCP客户端/服务器通信3. UDP客户端/服务器通信4. 简单文件传输四、实验步骤1. Winsock编程基础(1)创建Winsock环境在Visual Studio中,使用Winsock 2库进行编程。
首先,在项目属性中添加Winsock 2库。
(2)初始化Winsock使用WSAStartup函数初始化Winsock环境。
(3)创建套接字使用socket函数创建套接字。
(4)绑定套接字使用bind函数绑定套接字。
(5)连接套接字使用connect函数连接套接字。
(6)发送和接收数据使用send和recv函数发送和接收数据。
(7)关闭套接字使用closesocket函数关闭套接字。
(8)清理Winsock环境使用WSACleanup函数清理Winsock环境。
2. TCP客户端/服务器通信(1)创建TCP服务器端创建TCP服务器端程序,监听客户端的连接请求。
(2)创建TCP客户端创建TCP客户端程序,连接到服务器端。
(3)数据交换在客户端和服务器端之间进行数据交换。
3. UDP客户端/服务器通信(1)创建UDP服务器端创建UDP服务器端程序,接收客户端的数据。
(2)创建UDP客户端创建UDP客户端程序,向服务器端发送数据。
(3)数据交换在客户端和服务器端之间进行数据交换。
4. 简单文件传输(1)创建文件传输服务器端创建文件传输服务器端程序,监听客户端的文件传输请求。
(2)创建文件传输客户端创建文件传输客户端程序,向服务器端发送文件传输请求。
(3)文件传输在客户端和服务器端之间进行文件传输。
《网络编程》实验报告实验序号:02 实验项目名称:Socket编程学号姓名专业、班20网络工程实验地点指导教师实验时间2022一、实验目的及要求掌握Socket编程的基本原理,调试并在代码标注注释:(1) ServerSocket, ClientSocket(2) SimpleClient, SimpleServer(3) PortScanner(4) Sender, Receiver(5) SenderClient, ReceiverSever二、实验设备(环境)及要求一台Windows XP、JDK1.6、MyEclipse 8.5三、实验内容与步骤1运行ServerSocket, ClientSocket2.第二个实验,第三次连接不成功的原因是:客户端建立了三个不同的连接,而服务端只有两个。
3.第三个实验是扫描1-1024端口有没有被服务器监听。
4.判断连接结束方式5.设置睡眠时间四、实验结果与数据处理1运行ServerSocket, ClientSocket2.第二个实验,第三次连接不成功的原因是:客户端建立了三个不同的连接,而服务端只有两个。
3.第三个实验是扫描1-1024端口有没有被服务器监听。
4.判断连接结束方式5.设置睡眠时间四、实验结果与数据处理附源程序清单:1. EchoServerpackage Hello;import java.io.*;import .*;public class EchoServer {private int port=8000;//监听端口号private ServerSocket serverSocket;public EchoServer() throws IOException {serverSocket = new ServerSocket(port);//创建一个SocketSystem.out.println("服务器启动");}public String echo(String msg) {return "echo:" + msg;}private PrintWriter getWriter(Socket socket)throws IOException{////参数socket 表示每写一行,PrintWriter缓存就自动溢出,把数据写到目的地OutputStream socketOut = socket.getOutputStream();return new PrintWriter(socketOut,true);}private BufferedReader getReader(Socket socket)throws IOException{InputStream socketIn = socket.getInputStream();//获得输入流,获得用户的请求//数据流输入return new BufferedReader(new InputStreamReader(socketIn));}public void service() {while (true) {Socket socket=null;try {socket = serverSocket.accept(); //等待客户连接System.out.println("New connection accepted "+socket.getInetAddress() + ":" +socket.getPort());BufferedReader br =getReader(socket);PrintWriter pw = getWriter(socket);String msg = null;while ((msg = br.readLine()) != null) {System.out.println(msg);pw.println(echo(msg));if (msg.equals("bye")) //如果客户发送消息为“bye”,就结束通信break; }}catch (IOException e) {e.printStackTrace();}finally {try{if(socket!=null) socket.close(); //断开连接}catch (IOException e) {e.printStackTrace();}} } }// service() 方法结束public static void main(String args[])throws IOException {new EchoServer().service();}}import .*;import java.io.*;import java.util.*;public class EchoClient {//创建客户端private String host="localhost";//当参数host 的取值为“localhost”,表示EchoClient与EchoServer进程运行在同一个主机上private int port=8000;//监听端口号8000private Socket socket;public EchoClient()throws IOException{socket=new Socket(host,port); //建立连接}public static void main(String args[])throws IOException{//输入输出new EchoClient().talk();}private PrintWriter getWriter(Socket socket)throws IOException{//发送数据OutputStream socketOut = socket.getOutputStream();//获得输出流return new PrintWriter(socketOut,true);}private BufferedReader getReader(Socket socket)throws IOException{InputStream socketIn = socket.getInputStream(); //获得输入流return new BufferedReader(new InputStreamReader(socketIn));}public void talk()throws IOException {try{BufferedReader br=getReader(socket);PrintWriter pw=getWriter(socket);BufferedReader localReader=new BufferedReader(new InputStreamReader(System.in));String msg=null;while((msg=localReader.readLine())!=null){pw.println(msg);System.out.println(br.readLine());if(msg.equals("bye"))break;}}catch(IOException e){e.printStackTrace();}finally{//关闭流和连接try{socket.close();}catch(IOException e){e.printStackTrace();} }}}2. .SimpleClientimport java.io.*;import .*;public class SimpleClient {public static void main(String args[])throws Exception {Socket s1 = new Socket("localhost",8000);System.out.println("第一次连接成功");Socket s2 = new Socket("localhost",8000);System.out.println("第二次连接成功");Socket s3 = new Socket("localhost",8000);System.out.println("第三次连接成功");}package Hello;import java.io.*;import .*;public class SimpleServer {public static void main(String args[])throws Exception {ServerSocket serverSocket = new ServerSocket(8000,2); //连接请求队列的长度为2Thread.sleep(360000); //睡眠6分钟}}3. import .*;import java.io.*;public class PortScanner { public static void main(String args[]){String host="localhost";//当参数host 的取值为“localhost”,表示Client与Server进程运行在同一个主机上if(args.length>0)host=args[0];new PortScanner().scan(host);}public void scan(String host){//扫描1-1024端口Socket socket=null;for(int port=1;port<1024;port++){try {//try catch语句判断输出socket = new Socket(host, port);System.out.println("There is a server on port "+port);//如果有连接There is a server on port,} catch (IOException e) {System.out.println("Can't connect to port "+port);//如果没有连接Can't connect to port} finally {try {if(socket!=null)socket.close();//断开连接} catch (IOException e) {e.printStackTrace();}}}}4. Senderimport java.io.*;import .*;public class Receiver { private int port=8000;private ServerSocket serverSocket;private static int stopWay=1; //结束通信的方式private final int NATURAL_STOP=1; //自然结束private final int SUDDEN_STOP=2; //突然终止程序private final int SOCKET_STOP=3; //关闭Socket,再结束程序private final int INPUT_STOP=4; //关闭输入流,再结束程序private final int SERVERSOCKET_STOP=5; //关闭ServerSocket,再结束程序public Receiver() throws IOException {serverSocket = new ServerSocket(port);System.out.println("服务器已经启动");}private BufferedReader getReader(Socket socket)throws IOException{ InputStream socketIn = socket.getInputStream();return new BufferedReader(new InputStreamReader(socketIn));}public void receive() throws Exception{Socket socket=null;socket = serverSocket.accept();BufferedReader br =getReader(socket);for(int i=0;i<20;i++) {String msg=br.readLine();System.out.println("receive:"+msg);Thread.sleep(1000);if(i==2){ //终止程序,结束通信if(stopWay==SUDDEN_STOP){System.out.println("突然终止程序");System.exit(0);}else if(stopWay==SOCKET_STOP){System.out.println("关闭Socket并终止程序");socket.close();break;}else if(stopWay==INPUT_STOP){System.out.println("关闭输入流并终止程序");socket.shutdownInput();break;}else if(stopWay==SERVERSOCKET_STOP){System.out.println("关闭ServerSocket并终止程序");serverSocket.close();break;}}}if(stopWay==NA TURAL_STOP){socket.close();serverSocket.close();}}public static void main(String args[])throws Exception {if(args.length>0)stopWay=Integer.parseInt(args[0]);new Receiver().receive();}}Receiverimport .*;import java.io.*;import java.util.*;public class Sender {private String host="localhost";private int port=8000;private Socket socket;private static int stopWay=1; //结束通信的方式private final int NATURAL_STOP=1; //自然结束private final int SUDDEN_STOP=2; //突然终止程序private final int SOCKET_STOP=3; //关闭Socket,再结束程序private final int OUTPUT_STOP=4; //关闭输出流,再结束程序public Sender()throws IOException{socket=new Socket(host,port);}public static void main(String args[])throws Exception{if(args.length>0)stopWay=Integer.parseInt(args[0]);new Sender().send();}private PrintWriter getWriter(Socket socket)throws IOException{ OutputStream socketOut = socket.getOutputStream();return new PrintWriter(socketOut,true);}public void send()throws Exception {PrintWriter pw=getWriter(socket);for(int i=0;i<20;i++){String msg="hello_"+i;pw.println(msg);System.out.println("send:"+msg);Thread.sleep(500); //捕捉异常if(i==2){ //终止程序,结束通信if(stopWay==SUDDEN_STOP){System.out.println("突然终止程序");//输出System.exit(0);}else if(stopWay==SOCKET_STOP){System.out.println("关闭Socket并终止程序");//输出socket.close();break;}else if(stopWay==OUTPUT_STOP){socket.shutdownOutput();System.out.println("关闭输出流并终止程序");//输出break;}}}if(stopWay==NATURAL_STOP){socket.close();}}}5 SendClientimport java.io.*;import .*;public class SendClient {public static void main(String args[])throws Exception {Socket s = new Socket("localhost",8000);OutputStream out=s.getOutputStream();out.write("hello ".getBytes());out.write("everyone".getBytes());Thread.sleep(60000); //睡眠1分钟s.close();}}package Hello;import java.io.*;import .*;public class ReceiveServer { public static void main(String args[])throws Exception { ServerSocket serverSocket = new ServerSocket(8000);Socket s=serverSocket.accept();//s.setSoTimeout(20000);InputStream in=s.getInputStream();ByteArrayOutputStream buffer=new ByteArrayOutputStream();byte[] buff=new byte[1024];int len=-1;do{try{len=in.read(buff);if(len!=-1)buffer.write(buff,0,len);}catch(SocketTimeoutException e){System.out.println("等待读超时");len=0;}}while(len!=-1);System.out.println(new String(buffer.toByteArray())); //把字节数组转换为字符串}}。
序号:2014年秋季学期
计算机网络编程实验报告
班级:计12—1班
学号:12101020128
姓名:刘杰
总成绩:
评语:
指导教师签字:日期:
实验一、登陆页面及菜单界面的实现
一、实验目的
1、熟悉NET程序设计方法
2、熟悉Windows Form控件
3、熟悉NET程序调试方法
二、实验内容
1、创建Windows桌面应用,包括4个Form,1个主界面Form,一个版权申明界面Form,一个登陆界面Form,一个用户管理界面Form。
2、系统首先出现登陆界面包括两个label(用户和密码),两个textbox(用户和密码),1个按钮登陆。
点击登陆按钮后进入主界面。
3、创建一个系统主界面包括菜单(用户管理,版权)分别链接到用户管理Form 和版权Form,一个退出菜单实现系统退出。
4、背景图片使用文档内的。
三、简单实验步骤及截图
1、打开VS,新建C#WindowsForm应用项目,并添加4个Form窗体;
2、设置登录窗体属性(大小,背景图片等),然后从工具箱拖入三个Label,两个TextBox,一个CombineBox以及一个Button;
3.分别设置它们的属性(Text,size等),并双击登录按钮,添加登录主页面的方法如图:
4、设计登录后的主界面,从工具箱中拖入一个menuStrip控件,然后在menuStrip 里输入“用户管理”,“版权”等内容,并编辑相应的内容,如图:
四、实验运行截图
五、实验心得
通过这次实验,我对.net程序设计方法,WindowsForm控件以及.net调试方法有了初步的了解,拓宽了我的知识面,也增加了我对网络编程的兴趣。
《J2EE程序设计与应用开发》实验报告实验序号:06 实验项目名称:Servlet学号姓名专业、班20网络工程实验地点指导教师实验时间2022一、实验目的及要求1、Servlet基本基础2、Filter过滤器基础二、实验设备(环境)及要求一台Windows XP、JDK1.6、MyEclipse 8.5三、实验内容与步骤四、实验结果与数据处理附源程序清单:1.WelcomeServlet及其配置Web.xmlpackage servlets;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class WelcomeServlet extends HttpServlet{public WelcomeServlet(){System.out.println("WelcomeServlet构造函数");}protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { System.out.println("WelcomeServlet.doGet函数");}}2.过滤器(1)EncodingFilterpackage filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class EncodingFilter implements Filter {public void init(FilterConfig config) throws ServletException {}public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("gb2312");chain.doFilter(request, response);}}(2)filterForm .jsp文件<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <html><body><form action="servlets/DealWithServlet" method="post">请输入学生信息的模糊资料:<input type="text" name="stuname"><br><input type="submit" value="查询"></form></body></html>(3)DealWithServletpackage servlets;import java.io.IOException;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class DealWithServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String stuname = request.getParameter("stuname");System.out.println("学生姓名:" + stuname);}}。
第1篇一、实训背景随着互联网技术的飞速发展,网络编程已成为计算机科学与技术领域的重要分支。
为了提高学生的实际编程能力,培养具备创新精神和实践能力的高级应用型人才,我校组织开展了网络程序实训。
本次实训旨在通过实际操作,使学生掌握网络编程的基本原理和技能,提高学生在网络编程领域的实际应用能力。
二、实训目的1. 使学生掌握网络编程的基本概念、原理和技能;2. 培养学生的实际编程能力和团队协作精神;3. 增强学生对网络编程领域的认识,激发学生的学习兴趣;4. 为学生将来从事相关工作奠定基础。
三、实训内容本次实训主要内容包括:1. 网络编程基础:TCP/IP协议、HTTP协议、Socket编程等;2. Java网络编程:Java网络编程框架、Java网络编程实例等;3. Web开发:HTML、CSS、JavaScript、PHP等;4. 实战项目:设计并实现一个简单的网络应用程序。
四、实训过程1. 实训前期准备实训前,教师对学生进行了网络编程基础知识的讲解,包括TCP/IP协议、HTTP协议、Socket编程等。
同时,为学生提供了实训所需的教材和参考资料。
2. 实训过程(1)小组讨论:每个小组在实训过程中,共同讨论、交流、解决问题,培养团队协作精神。
(2)分组实践:学生根据实训内容,分组进行实践操作。
在实践过程中,教师巡回指导,解答学生疑问。
(3)作品展示:实训结束后,每个小组展示自己的作品,其他小组进行评价,教师进行总结。
五、实训成果1. 学生掌握了网络编程的基本概念、原理和技能;2. 学生具备了一定的实际编程能力和团队协作精神;3. 学生对网络编程领域有了更深入的认识,激发了学习兴趣;4. 学生为将来从事相关工作奠定了基础。
六、实训总结1. 教师总结本次网络程序实训,学生积极参与,取得了较好的效果。
但在实训过程中,也存在一些问题:(1)部分学生对网络编程基础知识掌握不牢固,影响了实训效果;(2)学生在实训过程中,对实际编程问题的解决能力有待提高;(3)部分学生缺乏团队协作精神,影响项目进度。
网络编程技术实验报告一实验目的:网络编程技术是计算机科学与技术专业、网络工程专业、软件工程专业的一门专业基础课程。
本课程以Java技术为主讲授,Java语言是当前最流行的网络编程语言。
本课程是一门实用性和综合运用性都很强的课程,实践教学环节是教学过程中必不可少的重要内容。
通过实验,让学生熟悉JDK中的主要内容,掌握用JDK调试和运行程序的方法,掌握网络编程的基本思想和开发方法、面向对象编程的思想,JA V A中的基本方法和技术,能够熟练使用JA V A设计、编写程序,特别是基于TCP/IP的Socket 编程,并能运用这些知识方法完成C/S和B/S结构程序的设计工作。
通过实验,提高学生使用Java语言程序设计开发的能力,提高应用面向对象技术分析和解决实际问题的能力,并在此基础上强化学生的实践意识、提高其分析问题、解决问题的能力以及动手能力和创新能力。
二实验要求要求学生熟悉JDK中的主要内容,掌握用JDK调试和运行程序的方法,掌握网络编程的基本思想和开发方法、面向对象编程的思想,JAVA中的基本方法和技术,能够熟练使用JAVA设计、编写程序,特别是基于TCP/IP的Socket编程,并能运用这些知识方法完成C/S和B/S结构程序的设计工作。
要注意培养学生良好的编程习惯,自始至终贯彻课程中所介绍的程序设计风格。
为保证尽量在统一安排的上机时间内完成程序设计任务,学生应事先做问题分析,并做静态检查。
学生应记录实验中所遇到的问题,并写出详细的实验报告。
课前准备上机程序,上机认真调试,课后撰写实验报告,实验报告包括实验目的、实验内容、源程序、实验结果及分析。
实验一java基本语法实验目的:了解Java的数据类型,掌握各种变量的声明方式,理解运算符的优先级,掌握Java基本数据类型、运算符与表达式,掌握顺序结构、选择结构和循环结构语法的程序设计方法。
实验要求:1、编写一个声明Java不同数据类型变量的程序。
2、编写使用不同选择结构的程序。
《网络编程》实验报告实验序号:01 实验项目名称:面向对象语言Java题2:Cola公司的雇员分为以下若干类:2.1 ColaEmployee :这是所有员工总的父类,属性:员工的姓名,员工的生日月份。
方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100 元。
22 SalariedEmployee :ColaEmployee 的子类,拿固定工资的员工。
属性:月薪2.3 HourlyEmployee :ColaEmployee 的子类,按小时拿工资的员工,每月工作超出160 小时的部分按照1.5 倍工资发放。
属性:每小时的工资、每月工作的小时数2.4 SalesEmployee :ColaEmployee 的子类,销售人员,工资由月销售额和提成率决定。
属性:月销售额、提成率2.5 定义一个类Company,在该类中写一个方法,调用该方法可以打印出某月某个员工的工资数额,写一个测试类TestCompany,在main方法,把若干各种类型的员工放在一个ColaEmployee 数组里,并单元出数组中每个员工当月的工资。
四、实验结果与数据处理题一题二五、分析与讨论附源程序清单:第一题:package Dyn;class EmployeeInfo{long ID;String name;void setID(long id){ID=id;}void setname(String strName){name=strName;} void displayInfo(){System.out.println("ID: "+ID);System.out.println("name: "+name);}}public class Employee {public static void main(String args[]){EmployeeInfo e1,e2;e1=new EmployeeInfo();e2=new EmployeeInfo();e1.setID(12345);e1.setname("Daming");e1.displayInfo();e2.setID(28822);e2.setname("Lingling");e2.displayInfo();}}第二题package Dyn;//4.1public class ColaEmployee {String name;int month;public ColaEmployee(){}public ColaEmployee(String name,int month){=name;this.month=month;}public double getSalary(int month){return 0;}}//4.2package Dyn;public class SalariedEmployee extends ColaEmployee{double monSalary;public SalariedEmployee(String name,int month,double monSalary){ super(name,month);this.monSalary=monSalary;}public double getSalary(int month){if(super.month==month){return monSalary +100;}else{return monSalary;}}}//4.3package Dyn;public class HourlyEmployee extends ColaEmployee{private int hourSalary;private int hourNum;public HourlyEmployee(String name,int month,int hourSalary,int hourNum){ super(name,month);this.hourSalary=hourSalary;this.hourNum=hourNum;}public double getSalary(int month){if(super.month==month){if(hourNum>160){return hourSalary*160+hourSalary*(hourNum-160)*1.5+100;}else{return hourSalary*hourNum+100;}}else{if(hourNum>160){return hourSalary*160+hourSalary*(hourNum-160)*1.5;}else{return hourSalary*hourNum;}}}}//4.4package Dyn;public class SalesEmployee extends ColaEmployee{private int monthSales;private double royaltyRate;public SalesEmployee(String name,int month,int monthSales,double royaltyRate){ super(name,month);this.monthSales=monthSales;this.royaltyRate=royaltyRate;}public double getSalary(int month){if(super.month==month){return monthSales*royaltyRate+100;}else{return monthSales*royaltyRate;}}}package Dyn;public class Company {public void getSalary(ColaEmployee c,int month){System.out.println(+"在"+month+"月的月薪为"+c.getSalary(month)+"元");}}package Dyn;public class TestCompany {public static void main(String[] args){ColaEmployee[] cel={new SalariedEmployee("salariedEmployee",6,30000),new HourlyEmployee("hourlyEmployee",5,100,300),new SalesEmployee("salesEmployee",2,80000,0.3),};for(int i=0;i<cel.length;i++){new Company().getSalary(cel[i],7);}}}。
java网络编程实验报告《Java网络编程实验报告》摘要:本实验报告主要介绍了Java网络编程的基本原理和实践操作。
通过实验,我们学习了如何使用Java编程语言进行网络编程,并实现了基本的客户端和服务器端通信。
我们探讨了Socket编程、TCP和UDP协议以及网络通信中的异常处理等内容。
通过本次实验,我们对Java网络编程有了更深入的理解,并且掌握了一些实用的技巧和方法。
关键词:Java网络编程、Socket编程、TCP协议、UDP协议、异常处理一、引言随着互联网的普及和发展,网络编程成为了程序员必备的技能之一。
Java作为一种跨平台的编程语言,具有良好的网络编程支持,因此受到了广泛的应用。
本次实验将通过实践操作,深入探讨Java网络编程的相关知识,为学习者提供一个全面的了解和实践的机会。
二、实验目的1. 了解Java网络编程的基本原理2. 掌握Socket编程的基本操作3. 理解TCP和UDP协议的区别与应用4. 学习网络通信中的异常处理方法三、实验内容1. Socket编程Socket是网络编程中的基本概念,它是实现网络通信的一种方式。
在本次实验中,我们首先学习了Socket的基本原理和使用方法。
通过创建Socket对象,我们可以建立客户端和服务器端之间的通信连接,实现数据的传输和交换。
2. TCP和UDP协议TCP和UDP是网络通信中常用的两种协议,它们分别具有不同的特点和适用场景。
在实验中,我们分别实现了基于TCP和UDP的客户端和服务器端通信。
通过比较两种协议的优缺点,我们可以更好地选择合适的协议来满足实际的需求。
3. 异常处理在网络通信中,由于各种原因可能会出现各种异常情况,如网络连接中断、数据传输错误等。
为了保证程序的稳定性和可靠性,我们需要对这些异常情况进行处理。
在本次实验中,我们学习了如何通过异常处理机制来处理网络通信中可能出现的异常情况,保证程序的正常运行。
四、实验结果通过本次实验,我们成功实现了基于Java的客户端和服务器端通信,并且掌握了Socket编程、TCP和UDP协议以及网络通信中的异常处理方法。
韶关学院
《网络编程》实验报告案例
实验课程名称:WIN高级编程
实验项目名称:文件上传与下载程序的设计
实验类型(打√):(基础□、综合□、设计 )
院系:计算机科学专业班级:计算机软件12本(2)姓名:学号:
指导教师:程细柱
韶关学院教务处编制
一、实验预习报告内容
预习日期2014年4月2日实验预习报告内容原则上应包含实验目的、实验所用主要仪器药品、实验原理及公式、实验预习疑问等项目。
㈠实验目的和要求
通过查看《网络编程》实验平台(下载地址:/detail/cflynn/6921289)的选项卡的“实验基础”部分知识,明白以下“实验目的”和“实验要求”:
1)掌握FTP工作原理、数据传输方式。
2)了解FTP规范(命令及响应吗)。
3)掌握两种文件传输模式下服务器与客户端的工作流程。
4)掌握FTP编程涉及的相关类及FTP重要功能的实现。
㈡实验内容
1)通过查看《网络编程》实验平台的选项卡的“实验基础”、“实验内容”和“实验实例”的具体信息,掌握“FTP程序”的设计方法。
2)查看“实验源代码”并运行“FTP服务器程序”和“FTP客户程序”设计一个类似的程序。
㈢实验仪器、设备及材料
1、一人一台计算机,先独立完成实验的预习部份,然后两人合作完成“实验过程与数据记录”部
份。
2、计算机硬件的最低配置为:PentiumⅢCPU、硬盘、彩显、局域网。
3、计算机软件的基本要求:《网络编程》实验平台、C#。
㈣实验原理
通过《网络编程》实验平台,我们明白:
1)FTP(File Transfer Protocol,文件传输协):是TCP/IP协议组中的协议之一,是Internet 传递文件最主要的方法。
FTP的主要功能如下:
(1)提供文件的共享,包括程序文件和数据文件;
(2)支持间接使用远程计算机;
(3)使用户不因各类主机文件存储器系统的差异而受影响;
(4)使用TCP提供可靠且有效的传输。
通过FTP传输文件,双方至少需要建立两个TCP连接,一个称为控制连接,用于传输FTP命令;一个称为数据连接,用于传输文件数据。
2)FTP常用的两种数据传输方式:ASCII传输方式和二进制传输方式。
(1)ASCII传输方式:该方式以ASCII编码方式传输数据,适用于传输仅包含英文的命令和参
数,或者在不同的平台间传输英文文本文件的场合。
在不同的平台间进行文件传输时,FTP通常会自动地调整文件的内容,把文件解释成目标计算机存储的文本文件的格式。
(2)二进制传输方式:采用该方式进行数据传输时,可以指定采用哪种编码传输命令或文件数据。
如果传输的文件不是英文文本文件,或者传输的命令参数中带有中文信息,则应该采用二进制传输方式。
3)FTP的两种工作模式:
(1)Port模式(主动模式):该模式表示服务器主动连接客户端,然后传输文件。
在此模式下,FTP客户端先用一个端口N(N>1024)向服务器的21号端口发起控制连接,连接成功后,再发出PORT N+1命令告诉服务器自己监听的端口号为N+1。
服务器接收到该命令后,用一个新的数据端口(一般是20号端口)与客户端的端口N+1建立连接,然后进行文件数据传输,而客户端则通过监听N+1端口接收文件数据。
(2)Passive模式(PASV,被动模式):该模式表示服务器被动接受客户端连接请求,即控制连接请求和数据连接请求都由客户端发起。
在此模式下,FTP客户端先随机开启一个端口N向服务器的21号端口发起控制连接,然后向服务器发送PASV命令,服务器收到此命令后,会用一个新的端口P(P>1024)进行监听,同时将该端口号告诉客户端,客户端收到响应命令后,再通过新的端口N+1连接服务器的端口P,然后进行文件数据传输。
4)利用以下FTP的USER、PASS、ACCT、REIN、QUIT、PASV、PORT、TYPE、MODE、CWD、PWD、MK、CDUP、RMD、LIS、NLST、RNFR、RNTO、DEL、RETR、STOR命令和响应码知识设计一个文件上传与下载功能的FTP服务器。
5)设计FTP客户端程序用到的相关类:
(1)FtpWebRequest类:用于实现文件传输协议(FTP)客户端功能,例如上传文件、下载文件等。
用法是:先用FtpWebRequest的Create方法得到FtpWebRequest的实例。
该方法有两种重载形式:FtpWebRequest.Create(String uriString)或FtpWebRequest.Create(Uri uri);如果FTP服务器不允许匿名访问,客户端必须向服务器提供用户名和密码(利用NetworkCredential类提供给服务器)。
(2)FtpWebResponse类:用于封装文件传输协议(FTP)服务器对请求的响应。
该类提供操作的状态以及从服务器下载的所有数据。
对应关键代码为:
FtpWebRequest request=(FtpWebRequest)FtpWebRequest.Create(ftpUriString);
FtpWebResponse response=(FtpWebResponse)request.GetResponse();
GetResponse方法建立控制连接,还可能创建数据连接。
该方法在接收到响应之前一直处于组塞状态。
若要防止组塞,则可通过调用BeginGetResponse和EndGetResponse方法替代GetResponse 异步执行此操作。
(3)NetworkCredential类:用于为基于密码的身份验证方案提供凭据。
该类可用于多种协议。
在FTP中,用于提供FTP用户名和密码。
例如:NetworkCredential networkCredential=new NetworkCredential(textBoxUserName.Text, textBoxPassword.Text);
二、实验过程与数据记录
实验时间:2014年4月3日(星期四第7-8节)
实验同组人:
如有实验数据表格,学生在实验预习时应画好实验数据表格,供实验时填写数据。
㈠实验过程如下:
1)用户先选择《网络编程》实验平台左边目录树中的“FTP应用编程”下的“FTP命令与服务器端编程”;再选择右上方的“实验基础”、“实验内容”和“实验实例”查看服务器端实验小工具的使用方法,以及服务器端算法的程序流程图。
2)点击右下角状态栏中的“实例代码”按钮查看“服务器端程序”的关键源代码。
4)选择左边目录树中的“FTP应用编程”下的“FTP相关类与客户端编程”。
5)用同样的方法查看客户端实验小工具的使用方法,以及客户端算法的程序流程图。
6)同样点击右下角状态栏中的“实例代码”按钮查看“客户端程序”的关键源代码。
7)点击右下角状态栏中的“FTP服务器端”按钮启动FTP服务器端。
用户可以设置服务器的IP地址和主目录,按“启动FTP服务”按钮启动服务器,该窗体将显示客户的文件传送信息。
8)用户点击实验平台主窗体右下角状态栏中的“FTP客户端”按钮可启动FTP客户端,再输入服务器IP地址、用户名和密码后,点击“登录”按钮连接FTP服务器;
9)登入成功后可以进行文件的上传与下载测试了。
㈡根据以上程序,设计一个类似的FTP程序,并写出“实验报告”。
指导教师
批阅及签名:签名:年月日
注:1、如个别实验内容多,实验表格页面不够写的,或有识图、画图要求的,学生应根据实验指导老师要求另附相同规格的纸张并粘贴在相应的“实验记录表”中。
2、实验记录表属教学运行材料,院系(中心)应按有关规定归档保管。