计算机网络实验报告(路由算法、Socket编程)
计算机网络实验报告
![计算机网络实验报告](https://img.taocdn.com/s3/m/5d1aba6f302b3169a45177232f60ddccda38e6ac.png)
计算机网络实验报告计算机网络实验报告计算机网络实验是大学计算机科学与技术专业的一门重要的实践课程,通过这门课程的学习和实践,学生们可以掌握计算机网络的基本知识,理解网络常见的问题和解决方案,熟练掌握网络配置、测试和故障排除等技能。
在这篇文章中,我们将介绍计算机网络实验报告的要求和相关案例。
一、计算机网络实验报告的要求1. 实验目的和方法在计算机网络实验报告中,首先应清晰地阐述实验的目的和方法,即实验要达到什么样的目标,使用什么样的方法来实现这个目标。
2. 实验环境和工具在实验报告中,要详细描述实验所使用的软硬件环境和工具,包括实验平台、操作系统、网络拓扑结构、网络设备、协议分析工具等,这些信息可以帮助读者更好地理解实验的过程和结果。
3. 实验步骤和过程实验步骤和过程是实验报告的核心内容,应详细描述实验的每一个步骤和过程,包括实验前的准备工作、实验中的操作流程、实验的成功与失败情况等。
4. 实验结果和分析实验结果和分析是实验报告的重要组成部分,应对实验结果进行分析和总结,分析实验中遇到的问题和解决方案,总结实验的收获和不足之处。
5. 实验总结和建议在实验报告的最后,应进行实验总结和建议,总结实验的目的、过程和结果,提出对实验的改进建议和未来拓展的方向。
二、计算机网络实验报告案例1. 实验名称:网络文件传输实验实验目的:学习FTP、HTTP协议,掌握文件传输的基本原理和方法。
实验环境:Windows 7/10,FileZilla等软件。
实验步骤:1)安装FileZilla软件。
2)配置本地站点和FTP服务器,连接FTP服务器。
3)上传和下载文件,记录传输速度和流量。
4)进行HTTP文件下载实验,观察文件下载的过程和数据传输情况。
实验结果和分析:我们成功地完成了FTP和HTTP文件传输实验,对文件传输的原理和方法有了更深入的认识。
同时,我们也发现了文件传输的安全问题,并提出了数据加密的建议,以保护文件传输的安全。
实验07-TCP_IP+Socket编程
![实验07-TCP_IP+Socket编程](https://img.taocdn.com/s3/m/304c651d78563c1ec5da50e2524de518974bd35e.png)
《计算机网络》实验报告实验序号:07 实验项目名称:TCP_IP Socket编程学号姓名专业、班实验地点实1-514 指导教师实验时间2013-11-26一、实验目的及要求1、通过对路由器安装与配置实验,加深对相关网络设备工作原理理解,掌握其常见产品的安装与配置方法,为将来从事网络工程建设打下基础。
2、通过实验,掌握路由器的基本参数配置、网络接口配置和路由协议配置,掌握静态路由的配置方法。
二、实验设备(环境)及要求计算机;学生不许把食物带到机房吃;不许上网做与实验无关的内容;不许同学之间聊天;保持实验室安静卫生。
下课把键盘,座椅放回原处。
三、实验内容与步骤1.分别编写基于TCP的socket程序服务端和客户端,要求客户端能发送消息到服务端,服务端再把此消息返回给客户端。
服务端:(1)打开vc++6.0,File-》new-》Projects-》Win32 Console Application,输入Project name,例如SimpleTCP_s,选择location后单击OK,选择simple application,单击ok。
(2)打开SimpleTCP_s.cpp,输入如下内容:#include "stdafx.h"#include <stdio.h>#include <winsock2.h> //WINSOCK.H(这个是WINSOCK API的头文件,WIN2K以上支持WINSOCK2,所以//可以用WINSOCK2.H);#pragma comment(lib, "WS2_32.lib")//Ws2_32.lib(WINSOCK API连接库文件).#define BUF_SIZE 1024int main(int argc, char* argv[]){WSADA TA wsaData;SOCKET socketL; // socket for listeningSOCKET socketC; // socket for CommunicationSOCKADDR_IN serverAddr;int nRet = -1;char recvbuf[BUF_SIZE];if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0){printf("WSAStartup failed!\n");return 1;}socketL = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);serverAddr.sin_family = AF_INET;serverAddr.sin_port = htons(5678);serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);bind(socketL, (SOCKADDR*)&serverAddr, sizeof(serverAddr));listen(socketL, 5);socketC = accept(socketL, NULL, NULL);if (socketC != INV ALID_SOCKET){nRet = recv(socketC, recvbuf, sizeof(recvbuf), 0);if (nRet > 0)printf("%s ", recvbuf);}closesocket(socketC);closesocket(socketL);WSACleanup();printf("请按回车键关闭");getchar();return 0;}(3)编译工程客户端:(1)和服务端一样操作,建立SimpleTCP_c工程。
socket编程实验报告
![socket编程实验报告](https://img.taocdn.com/s3/m/4a42a2a0534de518964bcf84b9d528ea81c72f8a.png)
socket编程实验报告《Socket编程实验报告》在计算机网络通信中,Socket编程是一种常见的通信方式,它允许不同的计算机之间进行数据交换和通信。
通过实验,我们可以更深入地了解Socket编程的原理和应用。
实验目的:1. 了解Socket编程的基本原理和概念2. 掌握Socket编程的基本操作和使用方法3. 实现简单的客户端和服务器端通信实验环境:1. 操作系统:Windows或Linux2. 编程语言:C/C++或Python实验步骤:1. 理解Socket编程的基本原理和概念,包括TCP和UDP协议2. 编写客户端程序,建立与服务器端的连接3. 编写服务器端程序,接受客户端的连接并进行数据交换4. 测试客户端和服务器端的通信功能,包括发送和接收数据实验结果:通过实验,我们成功实现了简单的客户端和服务器端通信。
我们能够在客户端发送数据,服务器端接收并处理数据,然后再将处理结果返回给客户端。
这证明了Socket编程的可行性和实用性。
实验总结:Socket编程是一种强大而灵活的通信方式,它可以实现不同计算机之间的数据交换和通信。
通过本次实验,我们更加深入地了解了Socket编程的原理和应用,掌握了基本的操作和使用方法。
我们相信在今后的学习和工作中,Socket编程将会发挥重要的作用,为我们的网络通信提供更多的可能性和便利性。
通过这次实验,我们对Socket编程有了更深刻的理解,也提升了我们的编程能力和实践能力。
我们相信,在今后的学习和工作中,Socket编程将会发挥重要的作用,为我们的网络通信提供更多的可能性和便利性。
计算机网络实验报告 winsock编程
![计算机网络实验报告 winsock编程](https://img.taocdn.com/s3/m/a13e447cf46527d3240ce0d9.png)
计算机网络实验一:socket文件传输一、实验目地1、了解网络通信原理。
掌握客户端/服务器程序设计。
2、理解Socket通信原理,掌握使用ServerSocket类和Socket类进行TCPSocket通信的程序设计方法二、实验原理Socket可以看成在两个程序进行通讯连接中的一个端点,是连接应用程序和网络驱动程序的桥梁,Socket在应用程序中创建,通过绑定与网络驱动建立关系。
此后,应用程序送给Socket的数据,由Socket交网络驱动程序向网络上发送出去。
计算机从网络上收到与该Socket绑定IP地址和端口号相关的数据后,由网络驱动程序交给Socket,应用程序便可从该Socket中提取接收到得数据,网络应用程序就是这样通过Socket进行数据的发送与接收的。
详细如图:我们来分析一下图,Host A上的程序A将一段信息写入Socket中,Socket 的内容被Host A的网络管理软件访问,并将这段信息通过Host A的网络接口卡发送到Host B,Host B的网络接口卡接收到这段信息后,传送给Host B 的网络管理软件,网络管理软件将这段信息保存在Host B的Socket中,然后程序B才能在Socket中阅读这段信息。
Socket套接口有3种类型。
1.SOCK_STREAM流式套接口,面向连接的,可靠地,TCP。
2.SOCK_DRAM数据报套接口,面向无连接,不可靠,UDP。
3.原始套接口,主要用于新的网络协议实现的测试三、实验分析1、实验要求、按需求编写服务器端和客户端程序代码。
实现:(1)服务器端向客户端提供文件目录。
(2)客户端向服务器端发出请求下载文件。
(3)客户端向服务器端上传文件。
2、Socket通信工作过程如下(1)、建立连接服务器(ServerSocket)监听指定端口,看是否有客户端的连接请求;客户端(ClientServer)创建套接字并通过指定端口请求与服务器建立连接。
计算机网络实验报告
![计算机网络实验报告](https://img.taocdn.com/s3/m/365bf2de195f312b3169a54a.png)
西南大学信息管理系《计算机网络》课程实验报告学生姓名:学号:专业班级:指导教师:二0一二年12 月 3 日一、实验题目socket编程二、实验目的熟悉掌握socket编程命令。
三、实验内容1、程序的设计、调试、运行的软件环境(1)Win7(2)Visual Studio2010旗舰版。
2、程序窗体设计(1)客户端程序窗体设计,如图3.2.1所示:图3.2.1 (2)服务端程序窗体设计如图3.2.2所示:图3.2.2 3、程序主要代码(1)客户端主要程序代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using .Sockets;using ;using System.IO;using System.Threading;namespace SyncChatClient{public partial class MainForm : Form{private string ServerIP;private int port;private bool isExit = false;private TcpClient client;private BinaryReader br;private BinaryWriter bw;public MainForm(){InitializeComponent();Random r = new Random((int)DateTime.Now.Ticks);txt_UserName.Text = "user" + r.Next(100, 999);lst_OnlineUser.HorizontalScrollbar = true;SetServerIPAndPort();}private void SetServerIPAndPort(){try{FileStream fs = new FileStream("ServerIPAndPort.txt", FileMode.Open);StreamReader sr = new StreamReader(fs);string IPAndPort = sr.ReadLine();ServerIP = IPAndPort.Split(':')[0];port = int.Parse(IPAndPort.Split(':')[1]);sr.Close();fs.Close();}catch (Exception ex){MessageBox.Show("配置IP与端口失败,错误的原因:" + ex.Message);Application.Exit();}}private void btn_Login_Click(object sender, EventArgs e){btn_Login.Enabled = fal se;try{client = new TcpClient();client.Connect(IPAddress.Parse(ServerIP), port);AddTalkMessage("连接成功");}catch(Exception ex){AddTalkMessage("连接失败的原因" + ex.Message);btn_Login.Enabled = true;return;}NetworkStream networkStream = client.GetStream();br = new BinaryReader(networkStream);bw = new BinaryWriter(networkStream);SendMessage("Logi n," + txt_UserName.Text);Thread threadReceive = new Thread(new ThreadStart(ReceiveData));threadReceive.IsBackground = true;threadReceive.Start();}private void ReceiveData(){string receiveString = null;while (isExit == false){try{receiveString = br.ReadString();}catch{if (isExit == false){MessageBox.Show("与服务器失去连接");}break;}string[] splitString = receiveString.Split(',');string command = splitString[0].ToLower();switch (command){case"login":AddOnline(splitString[1]);break;case"logout":RemoveUserName(splitString[1]);break;case"talk":AddTalkMessage(splitString[1] + ":\r\n");AddTalkMessage(receiveString.Substring(splitString[0].Length + splitString[1].Length+2));break;default:AddTalkMessage("什么意思啊?:" + receiveString);break;}}Application.Exit();}private void SendMessage(string message){try{bw.Write(message);bw.Flush();}catch{AddTalkMessage("发送失败");}}private delegate void AddTalkMessageDelegate(string message);private void AddTalkMessage(string message){if (txt_Message.InvokeRequired){AddTalkMessageDelegate d = new AddTalkMessageDelegate(AddTalkMessage);txt_Message.Invoke(d, new object[] { message });}else{txt_Message.AppendText(message + Environment.NewLine);txt_Message.ScrollToCaret();}}private delegate void AddOnlineDelegate(string message);private void AddOnline(string userName){if (lst_OnlineUser.InvokeRequired){AddOnlineDelegate d = new AddOnlineDelegate(AddOnline);lst_OnlineUser.Invoke(d, new object[] { userName });}else{lst_OnlineUser.Item s.Add(userName);lst_OnlineUser.SelectedIndex = lst_OnlineUser.Items.Count - 1;lst_OnlineUser.ClearSelected();}}private delegate void RemoveUserNameDelegate(string userName);private void RemoveUserName(string userName){if (lst_OnlineUser.InvokeRequired){RemoveUserNameDelegate d = new RemoveUserNameDelegate(RemoveUserName);lst_OnlineUser.Invoke(d, userName);}else{lst_OnlineUser.Item s.Remove(userName);lst_OnlineUser.SelectedIndex = lst_OnlineUser.Items.Count - 1;lst_OnlineUser.ClearSelected();}}private void btn_Send_Click(object sender, EventArgs e){if (lst_OnlineUser.SelectedIndex != -1){SendMessage("Talk," + lst_OnlineUser.SelectedItem + "," + txt_SendText.Text + "\r\n");txt_SendText.Clear();}else{MessageBox.Show("请先¨在¨【当前在线】中选择一个对话着");}}private void Mai nForm_FormClosing(object sender, FormClosingEventArgs e){if (client != null){try{SendMessage("Logout," + txt_UserName.Text);isExit = true;br.Close();bw.Close();client.Close();}catch{}}}private void txt_SendText_KeyPress(object sender, KeyPressEventArgs e){if (e.KeyChar == (char)Keys.Return){btn_Send.PerformClick();}}private void btn_LoadOnlineUser_Click(object sender, EventArgs e){}private void Mai nForm_Load(object sender, EventArgs e){}}}(2)服务端程序主要代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using ;using .Sockets;using System.Threading;using System.IO;namespace SyncChatServer{public partial class MainForm : Form{private List<User> userList = new List<User>();private string ServerIP;private int port;private TcpListener myListener;bool isNormalExit = false;public MainForm(){InitializeComponent();lst_State.HorizontalScrollbar = true;btn_Stop.Enabled = false;SetServerIPAndPort();}private void SetServerIPAndPort(){FileStream fs = new FileStream("ServerIPAndPort.txt", FileMode.Open);StreamReader sr = new StreamReader(fs);string IPAndPort = sr.ReadLine();ServerIP = IPAndPort.Split(':')[0];port = int.Parse(IPAndPort.Split(':')[1]);sr.Close();fs.Close();}private void btn_Start_Click(object sender, EventArgs e){myListener = new TcpListener(IPAddress.Parse(ServerIP), port);myListener.Start();AddItemToListBox(string.Format("开a始º?在¨²{0}:{1}监¨¤听¬y客¨ª户¡ì连¢?接¨®", ServerIP, port));Thread myThread = new Thread(ListenClientC onnect);myThread.Start();btn_Start.Enabled = false;btn_Stop.Enabled = true;}private void ListenClientConnect(){TcpClient newClient = null;while (true){try{newClient = myListener.AcceptTcpClient();}catch{break;}User user = new User(newClient);Thread threadReceive = new Thread(ReceiveData);threadReceive.Start(user);userList.Add(user);AddItemToListBox(string.Format("[{0}]进入", newClient.Client.RemoteEndPoint));AddItemToListBox(string.Format("当前连接用户数:{0}", userList.Count));}}private void ReceiveData(object userState){User user = (User)userState;TcpClient client = user.client;while (isNormalExit == false){string recei veString = null;try{receiveString = user.br.ReadString();}catch (Exception){if (isNormalExit == false){AddItemToListBox(string.Format("与[{0}]失去联系,已终止接收该用户信息", client.Client.RemoteEndPoint));RemoveUser(user);}break;}AddItemToListBox(string.Format("来自[{0}]:{1}",user.client.Client.RemoteEndPoint,receiveString));string[] splitString = receiveString.Split(',');switch(splitString[0]){case"Login":erName = splitString[1];SendToAllClient(user,receiveString);break;case"Logout":SendToAllClient(user,receiveString);RemoveUser(user);return;case"Talk":string talkString = receiveString.Substring(splitString[0].Length + splitString[1].Length + 2);AddItemToListBox(string.Format("{0}对{1}说{2}",erName,splitString[1],talkString));SendToClient(user,"talk," + erName + "," + talkString);foreach(User target in userList){if(erName == splitString[1] && erName != splitString[1]){SendToClient(target,"talk," + erName + "," + talkString);break;}}break;default:AddItemToListBox("什么意思啊:" + receiveString);break;}}}private void SendToAllClient(User user, string message){string command = message.Split(',')[0].ToLower();if (command == "login"){for (int i = 0; i < userList.Count; i++){SendToClient(user, "login," + userList[i].userName);}for (int i = 0; i < userList.Count; i++){if (erName != userList[i].userName){SendToClient(userList[i], "login," + erName);}}}else if(command == "logout"){for (int i = 0; i < userList.Count; i++){if (userList[i].userName != erName){SendToClient(userList[i], message);}}}}private void SendToClient(User user, string message){try{user.bw.Write(message);user.bw.Flush();AddItemToListBox(string.Format("向[{0}]发送:{1}", erName, message));}catch{AddItemToListBox(string.Format("向[{0}]发送信息失败",erName));}}private void RemoveUser(User user){userList.Remove(user);user.Close();AddItemToListBox(string.Format("当前连接用户数:{0}",userList.Count));}private delegate void AddItemToListBoxDelegate(string str);private void AddItemToListB ox(string str){if (lst_State.InvokeRequired){AddItemToListBoxDelegate d = AddItemToListBox;lst_State.Invoke(d, str);}else{lst_State.Item s.Add(str);lst_State.SelectedIndex = lst_State.Item s.Count - 1;lst_State.ClearSelected();}}private void btn_Stop_Click(object sender, EventArgs e){AddItemToListBox("开始停止服务,并依次使用户退出!");isNormalExit = true;for (int i = userList.Count - 1; i >= 0; i--){RemoveUser(userList[i]);}myListener.Stop();btn_Start.Enabled = true;btn_Stop.Enabled = false;}private void Mai nForm_FormClosing(object sender, FormClosingEventArgs e){if (myListener != null)btn_Stop.PerformClick();}private void Mai nForm_Load(object sender, EventArgs e){}}}4、运行程序先后打开服务端和客户端程序,然后点击服务端“开始监听”按钮,服务端信息框里就会显示“开始监听客户端”;然后在客户端“用户名”里创建一个用户名,否则系统默认自动生成用户名,用户名创建成功后点击“登录”按钮,客户端显示登录成功,服务端现实用户进入,接下来只需选中需要对话的人,就可开始对话。
计算机网络实验报告(路由算法、Socket编程)
![计算机网络实验报告(路由算法、Socket编程)](https://img.taocdn.com/s3/m/30a7565b804d2b160b4ec091.png)
计算机网络实验报告班级:姓名:学号:实验一一.实验目的及要求编写程序,模拟距离矢量路由算法的路由表交换过程,演示交换后的路由表的变化。
二.实验原理距离矢量路由算法是这样工作的:每个路由器维护一张路由表(即一个矢量),它以网络中的每个路由器为索引,表中列出了当前已知的路由器到每个目标路由器的最佳距离,以及所使用的线路。
通过在邻居之间相互交换信息,路由器不断地更新他们的内部路由表。
举例来说,假定使用延迟作为“距离”的度量标准,并且该路由器发送一个列表,其中包含了他到每一个目标路由器的延时估计值;同时,他也从每个邻居路由器接收到一个类似的列表。
假设一个路由器接收到来自邻居x的一个列表,其中x(i)表示x估计的到达路由器i所需要的时间。
如果该路由器知道他到x的延时为m毫秒,那么他也知道在x(i)+m毫秒之间内经过x可以到达路由器i。
一个路由器针对每个邻居都执行这样的计算,就可以发现最佳的估计值,然后在新的路由器表中使用这个最佳的估计值以及对应的输出路线。
三.源程序:#include "stdio.h"#include "stdlib.h"#include "malloc.h"#include "graphics.h"#include "dos.h"#define VERNUM 7typedef struct{int dis;int flag;int flag2;}RoutNode;char tmp[10];RoutNode data[VERNUM][VERNUM];void welcome();void InitRoutData(FILE* pfile);void PrintRoutData();void SendInf(int recv, int send);void Exchange();int main(){int start, end, i, j, m, n;FILE *pfile;welcome();pfile = fopen("1.txt", "r");if (pfile == NULL){printf("the file wrong,press any key to come back.\n");getch();return;}elseInitRoutData(pfile);fclose(pfile);printf("\nthe original route table:\n");for (i = 0; i<VERNUM; i++){printf("%c||", i + 65);for (j = 0; j < VERNUM; j++)if (data[i][j].dis > 0)printf("<%c %d> ", j + 65, data[i][j].dis);printf("\n");}PrintRoutData();getch();for (i = 0; i < VERNUM; i++){for (m = 0; m < VERNUM; m++)for (n = 0; n < VERNUM; n++)data[m][n].flag = 0;Exchange();PrintRoutData();getch();}printf("\nexchange the route table:\n");return 0;}void welcome(){int gdriver=DETECT,gmode;registerbgidriver(EGAVGA_driver);initgraph( &gdriver, &gmode,"C:\Win-TC");cleardevice();setbkcolor(CYAN);setviewport(0,0,639,479,1);clearviewport();setbkcolor(BLUE);setcolor(14);rectangle(200,200,440,280);setfillstyle(1,5);floodfill(300,240,14);settextstyle(0,0,2);outtextxy(50,30,"Distance Vector Routing Algorithm");setcolor(15);settextstyle(1,0,4);outtextxy(260,214,"Welcome to use!");line(0,80,640,80);getch();delay(300);cleardevice();}void InitRoutData(FILE* pfile){char num[10];int i = 0;char c;int m, n;fseek(pfile, 0, 0);for (m = 0; !feof(pfile) && m < 7; m++){for (n = 0; !feof(pfile) && n < 7; n++){while (!feof(pfile)){c = fgetc(pfile);if (c == ','){num[i] = '\0';data[m][n].dis = atoi(num);data[m][n].flag = 0;data[m][n].flag = 0;i = 0;break;} /*end of if*/else if ((c >= '0' && c <= '9') || c == '-'){num[i++] = c;} /*end of else if*/} /*end of while*/} /*end of for (n = 0*/} /*end of for (m = 0*/}void PrintRoutData(){int i, j;for (i = 0; i < VERNUM; i++){settextstyle(1,0,3);sprintf(tmp," %c",i + 65);outtextxy(i*80+50,130,tmp);outtextxy(10,160+i*40,tmp);}for (j = 0; j< VERNUM; j++){for (i = 0; i < VERNUM; i++){if (data[i][j].dis <= 0&&i!=j){if(data[i][j].flag2 ==1){setfillstyle(SOLID_FILL,5);bar(80*i+50,40*j+155,80*i+120,40*j+185);delay(50000);data[i][j].flag2 =0;}setfillstyle(SOLID_FILL,3);bar(80*i+50,40*j+155,80*i+120,40*j+185);settextstyle(1,0,2);sprintf(tmp,"-");outtextxy(80*i+65,40*j+165,tmp);}elseif(data[i][j].dis >=0){if(data[i][j].flag2 ==1){setfillstyle(SOLID_FILL,5);bar(80*i+50,40*j+155,80*i+120,40*j+185);delay(50000);data[i][j].flag2 =0;}setfillstyle(SOLID_FILL,3);bar(80*i+50,40*j+155,80*i+120,40*j+185);settextstyle(1,0,2);sprintf(tmp,"%d",data[i][j].dis);outtextxy(80*i+65,40*j+165,tmp);}} /*end of for (j = 0*/} /*end of for (i = 0*/}void SendInf(int recv, int send){int i;for (i = 0; i < VERNUM; i++){if (data[send][i].dis > 0&& data[send][i].flag!=1) { if (data[recv][i].dis <= 0&&recv!=i) {data[recv][i].dis = data[send][i].dis + data[recv][send].dis;data[recv][i].flag =1;data[recv][i].flag2 =1;}else if (data[recv][i].dis > data[send][i].dis + data[recv][send].dis){data[recv][i].dis = data[send][i].dis + data[recv][send].dis;data[recv][i].flag =1;data[recv][i].flag2 =1;}} /*end of if*/} /*end of for*/}void Exchange(){int i, j;for (i = 0; i < VERNUM; i++){for (j = 0; j < VERNUM; j++){if (data[i][j].dis > 0&& data[i][j].flag!=1){SendInf(i, j);} /*end of if*/} /*end of for (j = 0*/} /*end of for (i = 0*/}四、实验心得体会通过本次实验训练,我了解了距离矢量路由算法的基本原理,复习了C语言编程的内容,通过对路由算法的实现,加深了对路由表交换的理解。
计算机网络socket编程实验报告
![计算机网络socket编程实验报告](https://img.taocdn.com/s3/m/1c00643d0722192e4536f637.png)
Socket编程实验报告一、程序代码(1)服务器端#include <stdio.h>#include <Winsock2.h>#pragma comment(lib, "ws2_32.lib")void main(){ WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) { return; }if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ){ WSACleanup( );return; }SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));// 绑定端口listen(sockSrv,SOMAXCONN); //SOMAXCONN由系统确定请求数SOCKADDR_IN addrClient;// 连接上的客户端ip地址int len=sizeof(SOCKADDR);while(1){SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);// 接受客户端连接,获取客户端的ip地址char sendBuf[50];sprintf(sendBuf,"Welcome %s tohere!",inet_ntoa(addrClient.sin_addr));// 组合消息发送出去send(sockConn,sendBuf,strlen(sendBuf)+1,0);// 发送消息到客户端char recvBuf[50]; recv(sockConn,recvBuf,50,0);// 接受客户端消息printf("%s\n",recvBuf);closesocket(sockConn);WSACleanup();//断开连接}}(2)客户端代码#include <stdio.h>#include <Winsock2.h>#pragma comment(lib, "ws2_32.lib")void main(){WORD wVersionRequested;WSADATA wsaData;//WSAata用来存储系统传回的关于WinSocket的资料。
Socket编程实验报告
![Socket编程实验报告](https://img.taocdn.com/s3/m/25a5b151647d27284b7351ad.png)
实验报告实验一Socket编程一、实验目的通过socket程序的编写、调试,掌握socket编程的基本方法,了解客户端与服务器端的特点,掌握并熟悉运用socket类与ServerSocket类。
二、实验内容①学习socket编程使用的类和接口,着重掌握基于TCP协议的socket。
②编写服务器端的应用程序③编写客户端的应用程序④实现服务器端与客户端的交互三、实验代码1.服务器端程序过程:在端口5000上创建一个等待连接的ServerSocket对象server:server=new ServerSocket(5000);接着调用server对象的accept()方法等待某客户程序发出连接请求。
该方法一直阻塞直到有客户连接到带端口。
一旦有客户发送正确请求,则连接成功,accept()方法返回一个Socket对象,于是得到了一个新的用于通信的Socket对象,通信链路建立成功。
然后利用Socket 类提供的方法创建Socket对象的输入流和输出流。
此后即于客户端进行通信,直到客户端断开连接即关闭各个流结束通信。
代码如下:import .*;import java.io.*;class aa{static public void main (String args[]) throws IOException{ServerSocket server=null;Socket socket=null;InputStream is=null;OutputStream os=null;DataInputStream in=null;PrintStream out=null;try{ //在端口5000注册服务server=new ServerSocket(5000);socket =server.accept();//侦听连接请求,等待连接System.out.println("**********************服务器端界面*************************");System.out.println("与客户端连接成功!");System.out.println("");System.out.println("对话内容为:");System.out.println("");System.out.println("等待客户发送信息.....");//获取对应的Socket的输入/输出流is=socket.getInputStream();os=socket.getOutputStream();//建立数据流in= new DataInputStream(is);out =new PrintStream(os);//表示向对方输出out.println("Welcome!");//表示向对方输出String str=in.readLine();//逐行读取do{System.out.println("客户端说:"+ str);str=in.readLine();}while(str.trim().equals("BYE")) //如果是“BYE”就退出System.out.println("客户想要离开");}catch(Exception e) //捕获程序异常{System.out.println("Error:"+e);}finally{is.close();//关闭输入流os.close();//关闭输出流in.close();//关闭数据输入流socket.close();//关闭socket}}}2.客户端程序过程:首先创建一个指向服务器的指定端口号(5000)的Socket对象socket:socket=new Socket("localhost",5000);此时服务器指定为本地计算机,若要在网络中指定服务器,只需要将参数localhost改成相应的服务器名或者IP地址即可。
计算机网络socket编程实验报告
![计算机网络socket编程实验报告](https://img.taocdn.com/s3/m/1509fdfe84868762caaed5e2.png)
计算机网络socket编程实验报告
实验报告
黑龙江大学教务处
黑龙江大学计算机科学与技术专业、软件工程专业
《计算机网络》课程实验报告
学号20111913 姓名陈声晓班级1班
实验时间 4.16-4.30第1节-第2节
实验名称Socket通信
实验内容在一台计算机上实现两个程序的通信
一、实验目的
掌握Windows通信程序的编写,通信原理,实际编写通信程序,本试验是后续实验的基础。
做到在一台计算机上实现两个程序的通信。
二、实验环境
Windows xp/7
三、主要设计思想与算法
1.服务器创建socket,并规定通信的端口号(大于1024),等待客户端的连接。
2.客户端创建socket,通过端口号连接服务端。
3.客户端向服务端发送接收数据。
4.服务端接收发送数据。
5.通信结束,客户端和服务端关闭socket。
6.Socket通信流程:
四、实验结果(测试用例、实验结果)
五、实验总结
计算机网络通信利用java语言编写时,用到的技术室socket技术。
任何一个socket程序都至少包含客户端程序和服务端程序。
通过IP地址和端口号,实现了两台计算机之间的链接,然后才可以根据具体需要实现通信。
运行时先运行服务器程序,不难理解,客户端没有开放,就无法连接。
socket通信实验报告
![socket通信实验报告](https://img.taocdn.com/s3/m/c0f5e2d76aec0975f46527d3240c844769eaa0ab.png)
socket通信实验报告socket通信实验报告一、引言在计算机网络领域,Socket通信是一种常见的网络通信方式。
通过Socket,可以实现不同计算机之间的数据传输和通信。
本实验旨在通过搭建一个简单的Socket通信系统,了解Socket通信的基本原理和实现方式,并通过实验验证Socket通信的可行性和效果。
二、实验目的1. 了解Socket通信的基本原理和概念;2. 掌握Socket通信的编程实现方法;3. 验证Socket通信的可行性和效果。
三、实验环境和工具1. 实验环境:Windows操作系统;2. 编程语言:Python;3. 开发工具:PyCharm。
四、实验步骤1. 创建Socket服务器:首先,我们需要创建一个Socket服务器,用于监听客户端的连接请求。
在Python中,可以使用socket库来实现Socket服务器的创建。
通过指定IP地址和端口号,服务器可以监听指定的网络地址。
在实验中,我们选择使用本地回环地址(127.0.0.1)和一个自定义的端口号(例如8888)来创建Socket服务器。
2. 等待客户端连接:Socket服务器创建成功后,需要等待客户端的连接请求。
服务器通过调用socket的accept()方法来等待客户端的连接。
一旦有客户端连接成功,服务器将返回一个新的Socket对象,用于与客户端进行通信。
3. 客户端连接:在另一台计算机上,我们创建一个Socket客户端,用于连接到服务器。
客户端通过指定服务器的IP地址和端口号,调用socket的connect()方法来与服务器建立连接。
4. 数据传输:一旦客户端和服务器成功建立连接,它们就可以进行数据传输了。
在实验中,我们可以通过客户端向服务器发送数据,服务器接收并处理数据,然后将处理结果返回给客户端。
5. 断开连接:当数据传输完成后,客户端和服务器可以选择断开连接。
在Python中,可以通过调用socket的close()方法来关闭连接。
网络工程网络编程实验报告2-Socket编程
![网络工程网络编程实验报告2-Socket编程](https://img.taocdn.com/s3/m/4bb0b9b89f3143323968011ca300a6c30d22f141.png)
《网络编程》实验报告实验序号: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())); //把字节数组转换为字符串}}。
实验1-网络命令及SOCKET编程 实验报告
![实验1-网络命令及SOCKET编程 实验报告](https://img.taocdn.com/s3/m/942b1613fc4ffe473368ab48.png)
本科实验报告课程名称:计算机网络基础姓名:计算机学院学院:软件工程系:专业:软件工程学号:陆魁军陈辉指导教师:2013年10月20日浙江大学实验报告课程名称:计算机网络基础实验类型:普通实验实验项目名称:熟悉网络命令及用SOCKET编程实现mini FTP client / Server 学生姓名:专业:软件工程学号:同组学生姓名:无指导老师:陆魁军实验地点:例如:曹西软件学院机房实验日期:2013年9月14日开始一、实验目的和要求:在PC机上熟悉常用网络命令;熟悉掌握windows下的Socket编程,并应用Socket API 实现mini FTP client/ Server。
二、实验内容和原理在PC机上熟悉常用网络命令: Ping.exe,Netstat.exe, Telnet.exe, Tracert.exe, Winipcfg.exe,Arp.exe, Ftp.exe, Ipconfig.exe, Net.exe, Route.exe,选择5个或5个以上的命令书写实验报告。
使用Win32 Socket 函数实现,不能使用MFC的Csocket类库(MFC的Csocket 类库不能在LINUX、UNIX等环境下使用,跨平台性差),不能用C++ builder开发(编程量太少,C++ builder已完成了很多SOCKET代码的编写)。
1.mini FTP client/ Server要求:在客户端至少实现GET file, PUT file,CD( change Directory), PWD( display current directory in server)功能。
独立完成mini FTP client端及Server端程序。
mini FTP client/ Server不一定要使用标准FTP协议,不一定要与现有的标准FTP server互通,也不一定要与现有的标准FTP Client(例如LEAP FTP)互通。
计算机网络socket实验
![计算机网络socket实验](https://img.taocdn.com/s3/m/f753d982a0116c175f0e489d.png)
《计算机网络》实验报告socket编程学院姓名学号(后边附有源代码地址)年月日Phase 1: Establishing Client-Server Communications1.题目要求此题目要求实现一个通过TCP套接字来建立连接的通讯,服务器和客户端需要实现以下5个功能:1.客户端与服务器建立连接,需要用户名和加密密码。
2.客户端发送想分享的文件名给服务器。
3.客户端发送一个想下载的文件查询。
4.客户端显示收到的回复信息,并显示。
5.登出。
2.开发环境操作系统:Linux 2.6.32-279.el6.x86_64编程语言:C99编译器:GCC 4.4.6 20120305 (Red Hat 4.4.6-4)3.程序详解网络和I/O使用单线程利用epoll实现非阻塞异步IO。
此部分功能主要用于实现多客户端的网络I/O的轮询处理,使用Linux内核中的EPOLL特性实现。
维护一个哈希表(Client),用于将文件描述符与客户端数据(如接收缓冲区、发送缓冲区和会话状态等)进行映射。
对应主要的功能函数包括:int newclientid(int fd)用于在Client哈希表中创建新项,与提供的文件描述符(fd)对应。
int fd2clientid(int fd)用于在Client哈希表中根据提供的文件描述符(fd)查找项目。
void setnonblocking(int sock)设置SOCKET为非阻塞模式int server_startup(u_short port)在指定的端口上启动trackerd监听服务,并设置epollint push_data(struct client_data* client, char* buf, int len)向指定的客户端推送数据,会先进入客户端数据体内的发送缓冲区,再等待由epoll通知就绪时发送void close_client(int clientid)关闭指定的客户端,释放资源int server_loop()网络服务循环,调用epoll来接受连接和就绪通知,并监视连接中断,如有数据就绪则使用recv放入接收缓冲区,如通知发送就绪则将用send将发送缓冲区中的数据发送至客户端。
计网socket编程实验报告
![计网socket编程实验报告](https://img.taocdn.com/s3/m/e27ba03fe45c3b3567ec8b8c.png)
深圳大学实验报告实验课程名称:计算机网络实验项目名称: Socket 编程学院:计算机与软件学院专业:计算机科学与技术报告人:学号:班级:同组人:指导教师:实验时间: 2015-05-10 提交时间: 2015年5月29日声明:本次实验内容由报告人和同组人独立完成,所有涉及到他人的工作均已说明。
报告人和同组人均同意教师及学校为教学活动而引用本实验的内容,且无需事先征得同意和特别说明。
教务处制一、实验目的了解FTP协议的工作原理,掌握基于socket的网络编程的基本原理。
二、实验要求用 Socket (WinSock)编程,实现简单的 FTP 客户端:客户端和 FTP 服务器建立 Socket 连接。
向服务器发送 USER、PASS 命令登录 FTP 服务器。
使用 PORT(或PASV)建立数据连接。
使用 NLST 进行文件列表。
使用 RETR / STOR 命令下载/上传文件。
在下载完毕后断开数据连接并发送 QUIT 命令退出。
服务器:Apache Friends 中的 FileZillaFTP,或是lab:lab @ 在整个交互的过程中,控制连接始终处于连接的状态。
数据连接在每传输一个文件时先打开,传输后关闭三、实验分析设计(1)服务端启动,等待用户连接(2)客户端启动,请求与服务端连接(3)服务端应答,与用户建立连接(4)用户输入目录操作、文件上传下载等指令,服务端接收到指令后进行解析,作出相应的响应(5)重复(4)的过程,直至用户输入quit指令要求离开,服务结束四、核心代码说明#pragma comment(lib,"ws2_32")#include<WinSock.h>#include<fstream>#include<iostream>#include<errno.h>#include<time.h>#include<string>#include"ftpClient.h"using namespace std;#define MENU "Welcome To The FTP Server,Please Input The Command And Enter!Such as: LIST,CWD,RETR,STOR,DELE,RMD,MKD"//定义了在ftp服务器上能进行的操作int main(){char Dir[256];memset(Dir,NULL,256);int returnNum;char ip[16];int port;char test;char userName[50];memset(userName,NULL,50);strncpy(userName,"anonymous",strlen("anonymous"));char PWD[50];char temp[512];char Command[4];//char Parameter[256];cout<<"Please input the ip of the FTP server::";cin>>ip;cout<<"Do you want to change the port,Now the port is 21 :[Y/N]";//使用命令端口21来连接到ftp服务器,在ftp协议下不用更改cin>>test;if(test=='Y'||test=='y')//连接到ftp服务器{cout<<"Please input the num of the port::";cin>>temp;port =(temp[0] - '0')*100+(temp[1] - '0')*10+(temp[2] - '0'); //将字符型转化为数值型memset(temp,NULL,2);}else if (test=='N'||test=='n')port = 21;elsecout<<"Error"<<endl;/************************************用户登录模块************************************/ftpClient* client = new ftpClient(ip,port);cout<<"Do you want to change USERNAME,Now is anonymous:[Y/N]"; //不更改时默认的是匿名登录cin>>test;if(test=='Y'||test=='y'){cout<<"UserName::";cin>>userName;//输入登录名}else if (test=='N'||test=='n')cout<<"UserName::anonymous"<<endl;elsecout<<"Error Check input!"<<endl;client->setCommand("USER",userName);//验证登录名cout<<userName<<endl;client->sendCommand(); //向ftp服务器发送用户名returnNum = client->receiveCommand(); //从ftp服务器接收到的响应码,正确时应为331if(returnNum == 331){cout<<"PassWord::";cin>>PWD;//输入密码client->setCommand("PASS",PWD);client->sendCommand();returnNum = client->receiveCommand(); //从ftp服务器接收响应码,正确时应返回230if(returnNum == 230) //用户已经正确登录到了ftp服务器{while(1){cout<<MENU<<endl;cout<<"FTP::>";cin>>Command;if(strcmp(Command,"list")==0||strcmp(Command,"LIST")==0){/************************************连接控制,传输控制,命令传输(需使用socketData连接的命令,如:LIST)************************************/client->setCommand("PASV");client->sendCommand();client->receiveCommand();client->getPort();client->setCommand("TYPE","I");client->sendCommand();client->receiveCommand();client->interlizeDataSocket();client->setCommand("LIST", ".");cout<<Dir<<endl;client->sendCommand();client->receiveCommand();client->receiveList();client->receiveCommand();}else if(strcmp(Command,"CWD")==0||strcmp(Command,"cwd")==0){memset(Dir,NULL,512);cout<<"Plase input the dir of your will(compelete dir)::"<<endl;cin>>Dir;client->setCommand("CWD ",Dir);client->sendCommand();client->receiveCommand();}else if(strcmp(Command,"retr")==0||strcmp(Command,"RETR")==0){char* filename = new char[512];memset(filename,NULL,512);/************************************下载模块************************************/client->setCommand("PASV");client->sendCommand();client->receiveCommand();client->getPort();client->setCommand("TYPE","I");client->sendCommand();client->receiveCommand();client->interlizeDataSocket();cout<<"Please input the name you want to download:";cin>>filename;client->setCommand("RETR ",filename);client->sendCommand();client->receiveCommand();client->receiveData(filename);client->receiveCommand();delete filename;}else if(strcmp(Command,"stor")==0||strcmp(Command,"STOR")==0){char* filename = new char[512];memset(filename,NULL,512);/************************************上传模块************************************/client->setCommand("PASV");client->sendCommand();client->receiveCommand();client->getPort();client->setCommand("TYPE","I");client->sendCommand();client->receiveCommand();client->interlizeDataSocket();cout<<"Please input the name you want to UPload:";cin>>filename;client->setCommand("STOR ",filename);client->sendCommand();client->receiveCommand();client->sendData(filename);client->receiveCommand();delete filename;}else if(strcmp(Command,"dele")==0||strcmp(Command,"DELE")==0) //进入删除文件的程序代码段{char* filename = new char[512];memset(filename,NULL,strlen(filename));cout<<"Please input the filename you want to Delete:";cin>>filename;client->setCommand("DELE ",filename);client->sendCommand();client->receiveCommand();delete filename;}else if(strcmp(Command,"rmd")==0||strcmp(Command,"RMD")==0) //进入删除目录的程序代码段{memset(Dir,NULL,strlen(Dir));cout<<"Please input the Direct you want to Delete:";cin>>Dir;client->setCommand("RMD ",Dir);client->sendCommand();client->receiveCommand();}else if(strcmp(Command,"mkd")==0||strcmp(Command,"MKD")==0) //进入修改文件的程序代码段{memset(Dir,NULL,strlen(Dir));cout<<"Please input the Direct you want to Make:";cin>>Dir;client->setCommand("MKD ",Dir);client->sendCommand();client->receiveCommand();}else if(strcmp(Command,"QUIT")==0||strcmp(Command,"quit")==0) //进入退出文件的程序代码段{break;}else{cout<<"No such COMMAND!!";}}}}elsecout<<"Error You can not login in."<<endl;cout<<"Cleaning system resource"<<endl;//delete [] userName;//delete [] Direct;//delete client;cout<<"Exiting Goodbye"<<endl;system("pause");}五、测试与结果六、总结与分析本次实验达到了本项实验的初始目的和要求。
计网socket编程实验报告
![计网socket编程实验报告](https://img.taocdn.com/s3/m/4c94ec99cfc789eb162dc84d.png)
计网socket编程实验报告大学实验报告实验课程名称:计算机网络实验项目名称:Socket 编程学院:计算机与软件学院专业:计算机科学与技术报告人:学号:班级:同组人:指导教师:实验时间:全文结束》》-05-10 提交时间:全文结束》》年5月29日声明:本次实验内容由报告人和同组人独立完成,所有涉及到他人的工作均已说明。
报告人和同组人均同意教师及学校为教学活动而引用本实验的内容,且无需事先征得同意和特别说明。
教务处制1、实验目的了解FTP协议的工作原理,掌握基于socket的网络编程的基本原理。
2、实验要求用 Socket (WinSock)编程,实现简单的 FTP 客户端:客户端和 FTP 服务器建立 Socket 连接。
向服务器发送 USER、PASS 命令登录 FTP 服务器。
使用 PORT(或PASV)建立数据连接。
使用 NLST 进行文件列表。
使用 RETR / STOR 命令下载/上传文件。
在下载完毕后断开数据连接并发送 QUIT 命令退出。
服务器:Apache Friends 中的 FileZillaFTP,或是lab:lab @ ftp、case、szu、edu、cn在整个交互的过程中,控制连接始终处于连接的状态。
数据连接在每传输一个文件时先打开,传输后关闭3、实验分析设计(1)服务端启动,等待用户连接(2)客户端启动,请求与服务端连接(3)服务端应答,与用户建立连接(4)用户输入目录操作、文件上传下载等指令,服务端接收到指令后进行解析,作出相应的响应(5)重复(4)的过程,直至用户输入quit指令要求离开,服务结束4、核心代码说明#pragmament(lib,"ws2_32")#include<WinSock、h>#include<fstream>#include<iostream>#include<errno、h>#include<time、h>#include<string>#include"ftpClient、h"using namespace std;#define MENU "Wele To The FTP Server,Please Input The mand And Enter!Such as:LIST,CWD,RETR,STOR,DELE,RMD,MKD"//定义了在ftp服务器上能进行的操作int main(){charDir[256];memset(Dir,NULL,256);int returnNum;charip[16];int port;char test;charuserName[50];memset(userName,NULL,50);strncpy(userName,"a nonymous",strlen("anonymous"));char PWD[50];chartemp[512];char mand[4];//charParameter[256];cout<<"Please input the ip of the FTP server::";cin>>ip;cout<<"Do you want to change theport,Now the port is21 :[Y/N]"; //使用命令端口21来连接到ftp服务器,在ftp协议下不用更改cin>>test;if(test=='Y'||test=='y')//连接到ftp服务器{cout<<"Please input the num of theport::";cin>>temp;port =(temp[0]'0')*10+(temp[2]>setmand("USER",userName);//验证登录名cout<<userName<<endl;client->sendmand(); //向ftp服务器发送用户名returnNum = client->receivemand(); //从ftp服务器接收到的响应码,正确时应为331if(returnNum==331){cout<<"PassWord::";cin>>PWD;//输入密码client->setmand("PASS",PWD);client->sendmand();returnNum =client->receivemand(); //从ftp服务器接收响应码,正确时应返回230if(returnNum ==230)//用户已经正确登录到了ftp服务器{while(1){cout<<MENU<<endl;cout<<"FTP::>";cin>>mand;if(st rcmp(mand,"list")==0||strcmp(mand,"LIST")==0){/********** **************************连接控制,传输控制,命令传输(需使用socketData连接的命令,如:LIST)************************************/client->setmand("PASV");client->sendmand();client->receivemand();client->getPort();client->setmand("TYPE","I");client->sendmand();client->receivemand();client->interlizeDataSocket();client->setmand("LIST", "、");cout<<Dir<<endl;client->sendmand();client->receivemand();client->receiveList();client->receivemand();}elseif(strcmp(mand,"CWD")==0||strcmp(mand,"cwd")==0){memset(D ir,NULL,512);cout<<"Plase input the dir of yourwill(pelete dir)::"<<endl;cin>>Dir;client->setmand("CWD ",Dir);client->sendmand();client->receivemand();}elseif(strcmp(mand,"retr")==0||strcmp(mand,"RETR")==0){char* filename = newchar[512];memset(filename,NULL,512);/******************** ****************下载模块************************************/client->setmand("PASV");client->sendmand();client->receivemand();client->getPort();client->setmand("TYPE","I");client->sendmand();client->receivemand();client->interlizeDataSocket();cout<<"Please input the name you want to download:";cin>>filename;client->setmand("RETR ",filename);client->sendmand();client->receivemand();client->receiveData(filename);client->receivemand();delete filename;}elseif(strcmp(mand,"stor")==0||strcmp(mand,"STOR")==0){char* filename = newchar[512];memset(filename,NULL,512);/******************** ****************上传模块************************************/client->setmand("PASV");client->sendmand();client->receivemand();client->getPort();client->setmand("TYPE","I");client->sendmand();client->receivemand();client->interlizeDataSocket();cout<<"Please input the name you want to UPload:";cin>>filename;client->setmand("STOR ",filename);client->sendmand();client->receivemand();client->sendData(filename);client->receivemand();delete filename;}elseif(strcmp(mand,"dele")==0||strcmp(mand,"DELE")==0)//进入删除文件的程序代码段{char* filename = newchar[512];memset(filename,NULL,strlen(filename));cout<<"Please input the filename you want toDelete:";cin>>filename;client->setmand("DELE",filename);client->sendmand();client->receivemand();delete filename;}elseif(strcmp(mand,"rmd")==0||strcmp(mand,"RMD")==0)//进入删除目录的程序代码段{memset(Dir,NULL,strlen(Dir));cout<<"Please input the Direct you want to Delete:";cin>>Dir;client->setmand("RMD ",Dir);client->sendmand();client->receivemand();}elseif(strcmp(mand,"mkd")==0||strcmp(mand,"MKD")==0)//进入修改文件的程序代码段{memset(Dir,NULL,strlen(Dir));cout<<"Please input the Direct you want to Make:";cin>>Dir;client->setmand("MKD ",Dir);client->sendmand();client->receivemand();}elseif(strcmp(mand,"QUIT")==0||strcmp(mand,"quit")==0)//进入退出文件的程序代码段{break;}else{cout<<"No suchMAND!!";}}}}elsecout<<"Error You can not login in、"<<endl;cout<<"Cleaning system resource"<<endl;//delete [] userName;//delete[] Direct;//delete client;cout<<"Exiting Goodbye"<<endl;system("pause");}5、测试与结果6、总结与分析本次实验达到了本项实验的初始目的和要求。
Socket编程利用TCP协议的实验报告
![Socket编程利用TCP协议的实验报告](https://img.taocdn.com/s3/m/899709bf6137ee06eef91814.png)
Socket编程报告(TCP/IP协议)一.实验目的通过C++来实现TCP/IP协议下的Socket编程,掌握TCP协议的算法实现。
二.实验原理客户端建立Socket,通过端口号和地址确定目标服务器,使用Connect连接到服务器,send发送消息,等待处理,通信完成后调用CloseSocket 关闭Socket服务端建立Socket,声明自身的端口号和地址并绑定到Socket,使用Listen打开监听,然后不断用Accept去查看是否有连接,如果有,捕获Socket,并通过Recv获取消息的内容,通信完成后调用CloseSocket关闭这个对应Accept到的Socket,如果不再需要等待任何客户端连接,那么用CloseSocket关闭掉自身的Socket三.实验代码(C++实现)服务器端代码如下:#pragma once#include <stdio.h>#include <winsock.h>#pragma comment (lib,"ws2_32.lib")class CServerNet{public://初始化服务器,返回0表示成功int Init(const char* address,int port);//更新数据void Run();private:SOCKET m_sock;};int CServerNet::Init( const char* address,int port ){int rlt = 0;//用于记录错误信息,并输出int iErrorMsg;//初始化WinSockWSAData wsaData;iErrorMsg = WSAStartup(MAKEWORD(1,1),&wsaData);if (iErrorMsg != NO_ERROR){//初始化WinSock失败printf("wsastartup failed with error : %d\n",iErrorMsg);rlt = 1;return rlt;}//创建服务端Socketm_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if (m_sock == INVALID_SOCKET){//创建Socket异常printf("socket failed with error : %d\n",WSAGetLastError()); rlt = 2;return rlt;}//声明信息sockaddr_in serverAddr;serverAddr.sin_family = AF_INET;serverAddr.sin_port = port;serverAddr.sin_addr.s_addr = inet_addr(address);//绑定iErrorMsg = bind(m_sock,(sockaddr*)&serverAddr,sizeof(serverAddr));if (iErrorMsg < 0){//绑定失败printf("bind failed with error : %d\n",iErrorMsg);rlt = 3;return rlt;}return rlt;}void CServerNet::Run(){//公开连接listen(m_sock,5);sockaddr_in tcpAddr;int len = sizeof(sockaddr);SOCKET newSocket;char buf[1024];int rval;do{//接收信息newSocket = accept(m_sock,(sockaddr*)&tcpAddr,&len);if (newSocket == INVALID_SOCKET){//非可用socket}else{//新socket连接printf("new socket connect : %d\n",newSocket);//消息处理do{printf("process\n");//接收数据memset(buf,0,sizeof(buf));rval = recv(newSocket,buf,1024,0);if (rval == SOCKET_ERROR)//这应该是个异常,当客户端没有调用closeSocket就直接退出游戏的时候,将会进入这里printf("recv socket error\n");if (rval == 0)//recv返回0表示正常退出printf("ending connection");else//显示接收到的数据printf("recv %s\n",buf);}while(rval != 0);//关闭对应Accept的socketclosesocket(newSocket);}} while (1);//关闭自身的Socketclosesocket(m_sock);}int main(int argc, char **argv){CServerNet serverNet;if (iRlt == 0){printf("init ok...\n");serverNet.Run();}elseprintf("serverNet init failed with error : %d\n",iRlt);system("pause");}客户端代码如下:#pragma once#include <stdio.h>#include<windows.h>#pragma comment(lib, "Ws2_32.lib")class CClientNet{public://连接上指定服务器int Connect(int port,const char* address);//发送信息int SendMsg(const char* msg,int len);//关闭void Close();private:SOCKET m_sock;};int CClientNet::Connect( int port,const char* address ){int rlt = 0;//用于记录错误信息并输出int iErrMsg;//启动WinSockWSAData wsaData;iErrMsg = WSAStartup(MAKEWORD(1,1),&wsaData);if (iErrMsg != NO_ERROR)//有错误{printf("failed with wsaStartup error : %d\n",iErrMsg);rlt = 1;return rlt;}//创建Socketm_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if (m_sock == INVALID_SOCKET)//创建Socket失败{printf("socket failed with error : %d\n",WSAGetLastError());rlt = 2;return rlt;}//目标服务器数据sockaddr_in sockaddrServer;sockaddrServer.sin_family = AF_INET;sockaddrServer.sin_port = port;sockaddrServer.sin_addr.s_addr = inet_addr(address);//连接,sock与目标服务器连接iErrMsg = connect(m_sock,(sockaddr*)&sockaddrServer,sizeof(sockaddrServer));if (iErrMsg < 0){printf("connect failed with error : %d\n",iErrMsg);rlt = 3;return rlt;}return rlt;}int CClientNet::SendMsg(const char* msg,int len){int rlt = 0;int iErrMsg = 0;//发送消息,指定sock发送消息iErrMsg = send(m_sock,msg,len,0);if (iErrMsg < 0)//发送失败{printf("send msg failed with error : %d\n",iErrMsg);rlt = 1;return rlt;}return rlt;}void CClientNet::Close(){closesocket(m_sock);}int main(){CClientNet client;printf("Connect\n");//发送消息printf("send msg\n");client.SendMsg("hello\0",sizeof("hello\0"));//关闭socketprintf("close\n");client.Close();system("pause");}四.实验结果五.心得体会通过本次实验,我了解了TCP/IP协议与UDP协议的异同之处,理解了Socket在通信中的地位和作用。
计算机网络socket编程实验报告
![计算机网络socket编程实验报告](https://img.taocdn.com/s3/m/837526f0376baf1ffd4fad87.png)
Socket 编程实验报告一、程序代码( 1 )服务器端#include <stdio.h>#include <Winsock2.h>#pragma comment(lib, "ws2_32.lib")void main(){ WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) { return; }if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ){ WSACleanup( );return; }SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));// 绑定端口listen(sockSrv,SOMAXCONN); //SOMAXCONN 由系统确定请求数SOCKADDR_INaddrClient;// 连接上的客户端ip 地址intlen=sizeof(SOCKADDR);while(1){SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);// 接受客户端连接, 获取客户端的ip 地址charsendBuf[50];sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));// 组合消息发送出去send(sockConn,sendBuf,strlen(sendBuf)+1,0);// 发送消息到客户端charrecvBuf[50]; recv(sockConn,recvBuf,50,0);// 接受客户端消息printf("%s\n",recvBuf);closesocket(sockConn);WSACleanup();// 断开连接( 2)客户端代码#include <stdio.h>#include <Winsock2.h>#pragma comment(lib, "ws2_32.lib") void main(){WORD wVersionRequested;WSADATA wsaData;//WSAata 用来存储系统传回的关于WinSocket int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ){return;}if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( );return;}SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);// AF_INET ..tcp 连接,初始化连接与端口号SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");// 本机地址,服务器在本机开启addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);// 设置端口号connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//charrecvBuf[50];recv(sockClient,recvBuf,50,0);// 接受数据printf("%s\n",recvBuf);send(sockClient,"hello",strlen("hello")+1,0);// 发送数据closesocket(sockClient);// 关闭连接WSACleanup(); 的资料。
socket实验报告
![socket实验报告](https://img.taocdn.com/s3/m/6d2a23ae0875f46527d3240c844769eae109a353.png)
socket实验报告Socket实验报告简介Socket是计算机网络中一种常用的通信方式,它提供了一种用于网络通信的编程接口。
本实验旨在通过使用Socket编程实现简单的客户端和服务器之间的通信,探索Socket的基本原理和使用方法。
实验目的1. 理解Socket的概念和原理;2. 掌握Socket编程的基本步骤和方法;3. 实现一个简单的客户端和服务器之间的通信。
实验过程1. Socket的概念和原理Socket是一种抽象层,它将底层的网络通信细节封装起来,提供了一种简单、统一的编程接口。
通过Socket,应用程序可以通过网络进行数据传输,实现不同主机之间的通信。
2. Socket编程的基本步骤a. 创建Socket对象:在客户端和服务器端分别创建Socket对象,用于建立通信连接。
b. 建立连接:客户端通过Socket对象连接到服务器端,建立起通信通道。
c. 数据传输:通过Socket对象进行数据的发送和接收。
d. 关闭连接:通信结束后,关闭Socket连接。
3. 实现一个简单的客户端和服务器之间的通信a. 客户端代码:```pythonimport socketdef main():# 创建Socket对象client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 建立连接server_address = ('localhost', 8888)client_socket.connect(server_address)# 发送数据message = 'Hello, server!'client_socket.sendall(message.encode())# 接收数据data = client_socket.recv(1024)print('Received:', data.decode())# 关闭连接client_socket.close()if __name__ == '__main__':main()```b. 服务器端代码:```pythonimport socketdef main():# 创建Socket对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定地址和端口server_address = ('localhost', 8888)server_socket.bind(server_address)# 监听连接server_socket.listen(1)print('Waiting for client connection...')while True:# 建立连接client_socket, client_address = server_socket.accept()print('Connected by', client_address)# 接收数据data = client_socket.recv(1024)print('Received:', data.decode())# 发送数据message = 'Hello, client!'client_socket.sendall(message.encode())# 关闭连接client_socket.close()if __name__ == '__main__':main()```实验结果通过运行客户端和服务器端的代码,可以实现客户端向服务器发送消息,并接收服务器返回的消息。
计算机网络原理实验报告 基于TCPUDP的Socket编程
![计算机网络原理实验报告 基于TCPUDP的Socket编程](https://img.taocdn.com/s3/m/7558dd11312b3169a451a4d8.png)
实验报告学院(系)名称:计算机科学与工程学院Tcpsever:package uppercase;import java.io.*;import .*;class TCPServer{public static void main(String argv[]) throws Exception{String clientSentence;String capitalizedSentence;ServerSocket welcomeSocket = new ServerSocket(1234);while(true) {Socket connectionSocket = welcomeSocket.accept();BufferedReader infromClient = new BufferedReader(new InputStreamReader(connectionSocket. getInputStream()));DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());clientSentence = infromClient. readLine();capitalizedSentence = clientSentence.toUpperCase() + '\n';outToClient.writeBytes(capitalizedSentence);}}}用udp完成字符串大写Udpsever:package uppercase;import java.io.*;import .*;class UDPServer {clientSocket.send(sendPacket);DatagramPacket receivePacket =new DatagramPacket(receiveData, receiveData.length);clientSocket.receive(receivePacket);String modifiedSentence =new String(receivePacket.getData());System.out.println("FROM SERVER:" + modifiedSentence);clientSocket.close();}}用tcp传输文件package uppercase;import java.io.*;import .Socket;class TCPFileClient {public static void main(String argv[]) throws Exception{String HOST = "0.0.0.0";String filePath = "D:/bn/";BufferedReader infromUser = new BufferedReader(new InputStreamReader(System.in));String fileName = infromUser.readLine();BufferedWriter bWriter = new BufferedWriter(new FileWriter(filePath + fileName));Socket clientSocket = new Socket(HOST, 8810);DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());Socket connectionSocket = welcomeSocket.accept();BufferedReader infromClient = new BufferedReader(new InputStreamReader(connectionSocket. getInputStream()));DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());fileName = infromClient.readLine();BufferedReader bReader = new BufferedReader(new FileReader(filePath + fileName));String strLine = null;outToClient.writeBytes("PREPARE\n");while((strLine = bReader.readLine()) != null) {System.out.println(strLine);if (infromClient.readLine().contains("OK")){outToClient.writeBytes(strLine + '\n');}}outToClient.writeBytes("DONE\n");break;}}}5.实验结论与分析:通过此次实验使我熟悉和掌握socket编程的基本理论和方法。
计算机网络实验报告2
![计算机网络实验报告2](https://img.taocdn.com/s3/m/ac2a707dfe00bed5b9f3f90f76c66137ef064f09.png)
《计算机网络》课程实验报告附件:(一)系统概述1.运行环境: windowXP、win7等操作系统2.编译:已编译完成, 可直接执行可执行文件3.实现环境: Visual Studio 2010(二)使用方法:一般窗口应用程序, 双击即可运行。
(用户名:aaa 密码:123)(三)主要数据结构1.服务器端程序:2.Class CClientNet {public://连接上指定服务器int Connect(int port,const char* address);//发送信息//int SendMsg(const char* msg,int len);void SendMsg();//关闭V oid Close();private:SOCKET m_sock;}2.SOCKET3.WSAData4.sockaddr_in客户端程序:1. clas. CServerNet{public://初始化服务器,返回0表示成功int Init(const char* address,int port);//更新数据void Run();private:SOCKET m_sock;}3.SOCKET4.WSAData5.sockaddr_in(四)用户使用手册1. 运行服务器端程序server.exe。
2. 运行客户端程序client.exe。
3. 用户登录: 在客户端界面中出现connect则说明可以与服务器连接。
在login: 后输入用户名(aaa), 若用户名存在则client端返回该用户名的密码(123), 与输入密码比对, 若相同则连接成功, 可以开始发送消息。
4. 发送消息:在步骤3后, 用户端界面会出现“send your message:”的提示, 此时可以输入想要发送的消息, 输完后按enter键发送。
若发送成功, 则server界面出现发送的消息, client界面提示“send successfully”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机网络实验报告班级:姓名:学号:实验一一.实验目的及要求编写程序,模拟距离矢量路由算法的路由表交换过程,演示交换后的路由表的变化。
二.实验原理距离矢量路由算法是这样工作的:每个路由器维护一张路由表(即一个矢量),它以网络中的每个路由器为索引,表中列出了当前已知的路由器到每个目标路由器的最佳距离,以及所使用的线路。
通过在邻居之间相互交换信息,路由器不断地更新他们的内部路由表。
举例来说,假定使用延迟作为“距离”的度量标准,并且该路由器发送一个列表,其中包含了他到每一个目标路由器的延时估计值;同时,他也从每个邻居路由器接收到一个类似的列表。
假设一个路由器接收到来自邻居x的一个列表,其中x(i)表示x估计的到达路由器i所需要的时间。
如果该路由器知道他到x的延时为m毫秒,那么他也知道在x(i)+m毫秒之间内经过x可以到达路由器i。
一个路由器针对每个邻居都执行这样的计算,就可以发现最佳的估计值,然后在新的路由器表中使用这个最佳的估计值以及对应的输出路线。
三.源程序:#include "stdio.h"#include "stdlib.h"#include "malloc.h"#include "graphics.h"#include "dos.h"#define VERNUM 7typedef struct{int dis;int flag;int flag2;}RoutNode;char tmp[10];RoutNode data[VERNUM][VERNUM];void welcome();void InitRoutData(FILE* pfile);void PrintRoutData();void SendInf(int recv, int send);void Exchange();int main(){int start, end, i, j, m, n;FILE *pfile;welcome();pfile = fopen("1.txt", "r");if (pfile == NULL){printf("the file wrong,press any key to come back.\n");getch();return;}elseInitRoutData(pfile);fclose(pfile);printf("\nthe original route table:\n");for (i = 0; i<VERNUM; i++){printf("%c||", i + 65);for (j = 0; j < VERNUM; j++)if (data[i][j].dis > 0)printf("<%c %d> ", j + 65, data[i][j].dis);printf("\n");}PrintRoutData();getch();for (i = 0; i < VERNUM; i++){for (m = 0; m < VERNUM; m++)for (n = 0; n < VERNUM; n++)data[m][n].flag = 0;Exchange();PrintRoutData();getch();}printf("\nexchange the route table:\n");return 0;}void welcome(){int gdriver=DETECT,gmode;registerbgidriver(EGAVGA_driver);initgraph( &gdriver, &gmode,"C:\Win-TC");cleardevice();setbkcolor(CYAN);setviewport(0,0,639,479,1);clearviewport();setbkcolor(BLUE);setcolor(14);rectangle(200,200,440,280);setfillstyle(1,5);floodfill(300,240,14);settextstyle(0,0,2);outtextxy(50,30,"Distance Vector Routing Algorithm");setcolor(15);settextstyle(1,0,4);outtextxy(260,214,"Welcome to use!");line(0,80,640,80);getch();delay(300);cleardevice();}void InitRoutData(FILE* pfile){char num[10];int i = 0;char c;int m, n;fseek(pfile, 0, 0);for (m = 0; !feof(pfile) && m < 7; m++){for (n = 0; !feof(pfile) && n < 7; n++){while (!feof(pfile)){c = fgetc(pfile);if (c == ','){num[i] = '\0';data[m][n].dis = atoi(num);data[m][n].flag = 0;data[m][n].flag = 0;i = 0;break;} /*end of if*/else if ((c >= '0' && c <= '9') || c == '-'){num[i++] = c;} /*end of else if*/} /*end of while*/} /*end of for (n = 0*/} /*end of for (m = 0*/}void PrintRoutData(){int i, j;for (i = 0; i < VERNUM; i++){settextstyle(1,0,3);sprintf(tmp," %c",i + 65);outtextxy(i*80+50,130,tmp);outtextxy(10,160+i*40,tmp);}for (j = 0; j< VERNUM; j++){for (i = 0; i < VERNUM; i++){if (data[i][j].dis <= 0&&i!=j){if(data[i][j].flag2 ==1){setfillstyle(SOLID_FILL,5);bar(80*i+50,40*j+155,80*i+120,40*j+185);delay(50000);data[i][j].flag2 =0;}setfillstyle(SOLID_FILL,3);bar(80*i+50,40*j+155,80*i+120,40*j+185);settextstyle(1,0,2);sprintf(tmp,"-");outtextxy(80*i+65,40*j+165,tmp);}elseif(data[i][j].dis >=0){if(data[i][j].flag2 ==1){setfillstyle(SOLID_FILL,5);bar(80*i+50,40*j+155,80*i+120,40*j+185);delay(50000);data[i][j].flag2 =0;}setfillstyle(SOLID_FILL,3);bar(80*i+50,40*j+155,80*i+120,40*j+185);settextstyle(1,0,2);sprintf(tmp,"%d",data[i][j].dis);outtextxy(80*i+65,40*j+165,tmp);}} /*end of for (j = 0*/} /*end of for (i = 0*/}void SendInf(int recv, int send){int i;for (i = 0; i < VERNUM; i++){if (data[send][i].dis > 0&& data[send][i].flag!=1) { if (data[recv][i].dis <= 0&&recv!=i) {data[recv][i].dis = data[send][i].dis + data[recv][send].dis;data[recv][i].flag =1;data[recv][i].flag2 =1;}else if (data[recv][i].dis > data[send][i].dis + data[recv][send].dis){data[recv][i].dis = data[send][i].dis + data[recv][send].dis;data[recv][i].flag =1;data[recv][i].flag2 =1;}} /*end of if*/} /*end of for*/}void Exchange(){int i, j;for (i = 0; i < VERNUM; i++){for (j = 0; j < VERNUM; j++){if (data[i][j].dis > 0&& data[i][j].flag!=1){SendInf(i, j);} /*end of if*/} /*end of for (j = 0*/} /*end of for (i = 0*/}四、实验心得体会通过本次实验训练,我了解了距离矢量路由算法的基本原理,复习了C语言编程的内容,通过对路由算法的实现,加深了对路由表交换的理解。
实验二一、实验目的及要求编写程序,联系Socket编程和TCP/IP协议的应用,要求实现Server端和Client端的信息通信。
二、实验原理在TCP/IP编程中,为客户端和服务器端提供相同的端口号和IP地址号,实现Server端和Client端互联,运用Java文件流的知识,实现两端的信息传递。