计算机网络 Socket编程实验报告 华中科技大学 HUST
华科-计算机网络实验报告-javasocket编程-网络组建实验
![华科-计算机网络实验报告-javasocket编程-网络组建实验](https://img.taocdn.com/s3/m/dd79cb9ca1c7aa00b52acb5f.png)
课程实验报告课程名称:专业班级:计算机科学与技术1003班学号:姓名:鲁辰指导教师:报告日期:计算机科学与技术学院目录1实验二 Socket 编程(E-Mail)................... 错误!未定义书签。
实验目的....................................... 错误!未定义书签。
实验要求....................................... 错误!未定义书签。
实验内容....................................... 错误!未定义书签。
实验过程....................................... 错误!未定义书签。
需求分析................................... 错误!未定义书签。
界面....................................... 错误!未定义书签。
写信....................................... 错误!未定义书签。
收信....................................... 错误!未定义书签。
实验体会....................................... 错误!未定义书签。
2 实验2 网络组建与实施............................. 错误!未定义书签。
实验目的....................................... 错误!未定义书签。
实验环境、要求................................. 错误!未定义书签。
实验实验环境............................... 错误!未定义书签。
实验要求.................................... 错误!未定义书签。
socket编程 实验报告
![socket编程 实验报告](https://img.taocdn.com/s3/m/7d7779943086bceb19e8b8f67c1cfad6195fe9a4.png)
socket编程实验报告《Socket编程实验报告》在计算机网络通信中,Socket编程是一种常见的通信方式,它可以在不同的计算机之间实现数据的传输和通信。
本次实验旨在通过Socket编程实现一个简单的客户端和服务器端通信,并对其进行测试和分析。
实验环境:- 操作系统:Windows 10- 开发工具:Visual Studio Code- 编程语言:Python实验步骤:1. 设计客户端和服务器端的通信协议2. 编写客户端和服务器端的代码3. 运行客户端和服务器端,并进行通信测试4. 分析通信过程中的数据传输情况实验结果:经过实验,我们成功实现了一个简单的客户端和服务器端通信程序。
在测试过程中,我们发现数据可以正常地在客户端和服务器端之间传输,而且通信过程稳定可靠。
分析:通过本次实验,我们深入了解了Socket编程的基本原理和实现方式。
Socket编程可以灵活地实现不同计算机之间的通信,为网络通信提供了重要的技术支持。
在实际应用中,Socket编程可以用于实现各种网络通信功能,如网页浏览、文件传输、视频流等。
总结:通过本次实验,我们对Socket编程有了更深入的了解,并掌握了基本的编程技巧和调试方法。
Socket编程是网络通信中的重要技术,对于计算机网络领域的学习和应用具有重要的意义。
希望通过今后的实践和学习,我们能够进一步深化对Socket编程的理解,为网络通信技术的发展做出贡献。
通过本次实验,我们对Socket编程有了更深入的了解,并掌握了基本的编程技巧和调试方法。
Socket编程是网络通信中的重要技术,对于计算机网络领域的学习和应用具有重要的意义。
希望通过今后的实践和学习,我们能够进一步深化对Socket编程的理解,为网络通信技术的发展做出贡献。
S452-计算机网络实验-实验七_Windows_Socket_编程
![S452-计算机网络实验-实验七_Windows_Socket_编程](https://img.taocdn.com/s3/m/c4540beb6c85ec3a86c2c549.png)
7
Socket套接字
目标:学习如何建立客户端/服务器应用程序,使 用套接字进行通信
套接字(socket): 应用进程之间的接口,实现端到
端的传输协议
应用层
进程
传输层 网络层 数据链路层 物理层
套接字
Internet
应用层
进程
传输层 网络层 数据链路层 物理层
由应用 开发者 控制
由操作 系统控制
一个本地的, 应用程序创建的, 操作系统控制的接口。
通过该接口 应用进程可以 从另一个应用进程 发送或者接收消息
90年代初,由Microsoft联合其他几家公 司共同制定了一套Windows下的网络编程 接 口 , 即 Windows Socket 规 范 。 它 是 Berkeley Socket的重要扩充,主要是增加了 一些异步函数,并增加了符合Windows消 息驱动特性的网络事件异步选择机制。 WinSock规范是一套开放的、支持多种协议 的 Windows 下 的 网 络 编 程 接 口 。 从 1991 年 的1.0版到1995年的2.0.8版,经过不断完善, 已成为Windows网络编程的事实上的标准。
应用案例
客户端从键盘读取一行字符(数据)并将该数据发送到 服务器;
服务器接收数据后并显示在屏幕上。 14
示例: C客户端 (TCP)
Socket编 程库文件
#include <windows.h> #include <winsock2.h> #include <stdio.h> #include <string.h> #include <conio.h>
exit(1);
}
华中科技大学计算机网络实验报告
![华中科技大学计算机网络实验报告](https://img.taocdn.com/s3/m/02144a4cb307e87101f6963a.png)
《计算机网络》课程实验报告ip.addr == 116.114.22.19 and http捉任何主机发出的Ethernet 802.3格式的帧(帧的长度字段<=1500), Ethereal 的capture filter 的filter string设置为:ether[12:2] <= 1500捕捉任何主机发出的DIX Ethernet V2(即Ethernet II)格式的帧(帧的长度字段>1500, 帧的长度字段实际上是类型字段), Ethereal的capture filter 的filter string设置为:ether[12:2] > 1500观察并分析帧结构,802.3格式的帧的上一层主要是哪些PDU?是IP、LLC还是其它哪种?答:PDU协议数据单元中,帧的上层PDU是IP分组,802.3将数据链路层分为LLC子层和MAC子层,IP分组分别要经过LLC和MAC层封装才交由物理层传输。
答:Ethernet 802.2将Ethernet II帧头的协议类型字段替换为帧长度字段,并加入LLC-802.2头,用以标记上层协议。
LLC头包含目的服务访问点(DSAP)、源服务访问点(SSAP)和控制(Control)字段。
捕捉并分析局域网上的所有ethernet broadcast广播帧,Ethereal的capturefilter 的filter string设置为:ether broadcast(1). 观察并分析哪些主机在发广播帧,这些帧的高层协议是什么?主要做什么用处?(2). 你的LAN的共享网段上连接了多少台计算机?1分钟内有几个广播帧?有否发生广播风暴?答:比如,222.20.67.218主机发的Broadcast帧的高层协议为ARP协议。
ARP为地址解析协议,简言之,在IP-以太网中,当一个上层协议要发包时,有了节点的IP地址,ARP就能提供该节点的MAC地址。
计算机网络实验报告(路由算法、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的资料。
华中科技大学计算机网络实验报告
![华中科技大学计算机网络实验报告](https://img.taocdn.com/s3/m/395cde8b524de518964b7df5.png)
实验四:网络协议与 Web 通信
一、 实验目的
1. 了解网络协议数据单元的格式 2. 分析网络协议工作基本流程 3. 深入理解 Web 应用的通信过程
二、 实验内容
1. 网络协议数据单元分析 通过 wireshark 抓取局域网数据包并分析各个层次的协议数据单元内容 (1) 以太网帧头 (2) IP 分组首部 (3) ARP 包 (4) ICMP 包(ping) 2. Web 原理实验 (1) HTTP 协议分析 (2) 通过 socket 编程模拟 HTTP 协议通信过程
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,通力根1保过据护管生高线产中敷工资设艺料技高试术中卷0资不配料仅置试可技卷以术要解是求决指,吊机对顶组电层在气配进设置行备不继进规电行范保空高护载中高与资中带料资负试料荷卷试下问卷高题总中2体2资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况1卷中下安,与全要过,加度并强工且看作尽护下可1都关能可于地以管缩正路小常高故工中障作资高;料中对试资于卷料继连试电接卷保管破护口坏进处范行理围整高,核中或对资者定料对值试某,卷些审弯异核扁常与度高校固中对定资图盒料纸位试,置卷编.工保写况护复进层杂行防设自腐备动跨与处接装理地置,线高尤弯中其曲资要半料避径试免标卷错高调误等试高,方中要案资求,料技编试术写5、卷交重电保底要气护。设设装管备备置线4高、调动敷中电试作设资气高,技料课中并3术试、件资且中卷管中料拒包试路调试绝含验敷试卷动线方设技作槽案技术,、以术来管及避架系免等统不多启必项动要方高式案中,;资为对料解整试决套卷高启突中动然语过停文程机电中。气高因课中此件资,中料电管试力壁卷高薄电中、气资接设料口备试不进卷严行保等调护问试装题工置,作调合并试理且技利进术用行,管过要线关求敷运电设行力技高保术中护。资装线料置缆试做敷卷到设技准原术确则指灵:导活在。。分对对线于于盒调差处试动,过保当程护不中装同高置电中高压资中回料资路试料交卷试叉技卷时术调,问试应题技采,术用作是金为指属调发隔试电板人机进员一行,变隔需压开要器处在组理事在;前发同掌生一握内线图部槽 纸故内资障,料时强、,电设需回备要路制进须造行同厂外时家部切出电断具源习高高题中中电资资源料料,试试线卷卷缆试切敷验除设报从完告而毕与采,相用要关高进技中行术资检资料查料试和,卷检并主测且要处了保理解护。现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
HUST-计算机网络实验-socket编程
![HUST-计算机网络实验-socket编程](https://img.taocdn.com/s3/m/051e4844e55c3b3567ec102de2bd960590c6d9d1.png)
HUST-计算机⽹络实验-socket编程随笔---HUST计⽹实验:socket编程博主⼤三在读,第⼀次写随笔,⽔平有限,就当记录⼀下学习的过程,顺便⾯试前复习项⽬的时候看看。
实验要求:编写⼀个 Web 服务器软件,要求如下:基本要求:1.可配置 Web 服务器的监听地址、监听端⼝和主⽬录(不得写在代码⾥⾯,不能每配置⼀次都要重编译代码);2.能够单线程处理⼀个请求。
当⼀个客户(浏览器,如输⼊“URL:http:// 202.103.2.3/index.html”)连接时创建⼀个连接套接字;3.从连接套接字接收 http 请求报⽂,并根据请求报⽂的确定⽤户请求的⽹页⽂件;4.从服务器的⽂件系统获得请求的⽂件。
创建⼀个由请求的⽂件组成的 http 响应报⽂。
;5.经 TCP 连接向请求的浏览器发送响应,浏览器可以正确显⽰⽹页的内容;⾼级要求:1.能够传输包含多媒体(如图⽚)的⽹页给客户端,并能在客户端正确显⽰;2.在服务器端的屏幕上输出请求的来源(IP 地址、端⼝号和 HTTP 请求命令⾏);3.在服务器端的屏幕上能够输出对每⼀个请求处理的结果;4.对于⽆法成功定位⽂件的请求,根据错误原因,作相应错误提⽰,并具备⼀定的异常情况处理能⼒。
Socket套接字介绍:Socket 是⼀个抽象概念,代表了通信双⽅的端点(Endpoint),通信双⽅通过 Socket 发送或接收数据。
为了将应⽤程序和底层的⽹络通信协议屏蔽开来,采⽤套接字(Socket)这样⼀个抽象概念来作为应⽤程序和底层⽹络之间的应⽤程序编程接⼝(API)。
因为⽹络应⽤程序是进程之间的通信,为了唯⼀的标识通信对等⽅的通信进程,套接字必须包含 2 种信息:(1) 通信对等⽅的⽹络地址。
(2) 通信对等⽅的进程号,通常叫端⼝号。
构造⽅法(常⽤):ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException。
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地址即可。
华中科技大学计算机网络实验报告
![华中科技大学计算机网络实验报告](https://img.taocdn.com/s3/m/157e351df02d2af90242a8956bec0975f465a4c5.png)
华中科技⼤学计算机⽹络实验报告计算机⽹络实验报告班级:电信0904姓名:XX学号:U200913693实验四:⽹络协议与Web通信⼀、实验⽬的1.了解⽹络协议数据单元的格式2.分析⽹络协议⼯作基本流程3.深⼊理解Web应⽤的通信过程⼆、实验内容1.⽹络协议数据单元分析通过wireshark抓取局域⽹数据包并分析各个层次的协议数据单元内容(1)以太⽹帧头(2)IP分组⾸部(3)ARP包(4)ICMP包(ping)2.Web原理实验(1)HTTP协议分析(2)通过socket编程模拟HTTP协议通信过程三、实验原理1.Web通信经过四个步骤:(1)建⽴连接(2)客户端发送HTTP REQUEST请求(3)服务器端接收请求,⽣成RESPONSE响应(4)关闭连接2.HTTP协议客户端浏览器或其他程序与Web服务器之间的应⽤层通信协议。
⼀般在Internet 上的Web服务器上存放的都是超⽂本信息,客户机需要通过HTTP协议传输所要访问的超⽂本信息。
四、实验内容及分析1.编译、执⾏参考程序本次实验提供了两个原始程序(NetServer.java和NetClient.java),它们可以实现⼀个服务器/客户端请求响应的完整过程。
Dos环境下先后编译执⾏NetServer.java与NetClient.java,即可得到⼀次完整的客户端向服务器请求并得到响应的完整过程,结果如下:2.修改、编写实验程序参考程序模拟了客户端与服务器之间的对话,但由于其之间交互的数据都是我们设定的⽽不含有http报头信息,因此不能和真正的web服务器与浏览器对话,以下即为实现⾃制web服务器的⽅法(1)利⽤⾃制的服务器获取真正浏览器的HTTP Request 报头信息:运⾏⾃制的服务器,默认监听端⼝8080,在浏览器中输⼊以下⽹址http://127.0.0.1:8080/new/main/UserLoad.jsp,其中127.0.0.1为本机localhost地址,这样浏览器就会向⾃制服务器发出请求,服务器即可获取http request报头信息。
socket实验报告
![socket实验报告](https://img.taocdn.com/s3/m/9ffd45c64028915f804dc2c9.png)
中南大学Socket通信实验公共网络络班级信息安全0901学生王树雄学号0909090128教师王伟平【实验目的】理解Socket的基本概念工作原理,掌握Socket的建立、监听、连接、发送数据和接收数据。
【实验内容】采用Java(c++或者c语言)语言编写网络上的点对点的Socket程序。
该程序必须能在服务器端实现监听连接请求,客户端实现发送连接请求的功能,在建立连接后进行发送和接收数据的功能。
【实验要求】实验课时为4学时。
要求完成在服务器端和客户端的源程序的编写,并作出分析。
具体要求如下:1、服务器端建立一个Socket,设置好本机的IP和监听的端口与Socket进行绑定,开始监听连接请求,当接收到连接请求后,发出确认,同客户端建立连接,开始与客户端进行通信。
2、客户端建立一个Socket,设置好服务器端的IP和提供服务的端口,发出连接请求,在收到服务器的确认后,建立连接,开始与服务器端进行通信。
3、服务器端和客户端的连接及它们之间的数据传送均采用同步方式。
【基本概念】网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向连路的一端成为一个Socket。
Socket通常用来实现客户方和服务方的连接。
它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。
在Java等语言中,有专门的Socket类来处理用户的请求和响应。
利用Socket类的方法,就可以实现两台计算机之间的通讯。
【演示界面】主界面注册界面【总结感悟】用到了java语言已经提供好的socket类进行调用,这在很大程度上方便了我们的操作,遇上的问题是注册在文件里面和登陆的时候从文件里面调取。
还有多道线程方面的处理问题。
以及界面等方面的内容,当然,设计到的专业知识是tcp 方面的,也就是面向连接的,也可以用udp来进行通信。
华科-计算机网络实验报告-JavaSocket编程-网络组建实验
![华科-计算机网络实验报告-JavaSocket编程-网络组建实验](https://img.taocdn.com/s3/m/15309558fc4ffe473368aba7.png)
课程实验报告课程名称:专业班级:计算机科学与技术1003班学号:姓名:鲁辰指导教师:报告日期:2013.05.06计算机科学与技术学院目录1实验二Socket 编程(E-Mail) (3)1.1 实验目的 (3)1.2 实验要求 (3)1.3 实验容 (3)1.4 实验过程 (4)1.4.1 需求分析 (4)1.4.2 界面 (5)1.4.3 写信 (7)1.4.4 收信 (13)1.5 实验体会 (18)2 实验2 网络组建与实施 (19)2.1 实验目的 (19)2.2 实验环境、要求 (19)2.2.1 实验实验环境 (19)2.2.2实验要求 (19)2.3实验容 (19)2.3.1实验1 组网实验 (19)2.3.2 实验2 路由配置实验 (20)2.3.3 实验3 VLAN划分实验 (21)2.3.4 实验4 访问控制配置实验 (22)2.4 实验过程 (22)2.4.1 系统的安装与配置 (22)2.4.2 实验1 组网实验 (23)2.4.3 实验2 路由配置实验 (34)2.4.4 实验3 VLAN划分实验 (46)2.4.5 实验4 访问控制配置实验 (49)2.5 实验体会 (52)1实验二Socket 编程(E-Mail)1.1 实验目的了解应用层和运输层的作用及相关协议的工作原理和机制。
掌握SOCKET 编程的基本方法。
1.2 实验要求必须基于Socket 编程,不能直接借用任何现成的组件。
提交实验设计报告和源代码;实验设计报告必须包括程序流程,源代码必须加详细注释。
基于自己的实验设计报告,通过实验课的上机试验,在TurboC 2.0(或者Visual C++ 6.0 或者Java)编程环境下将源代码编译成功,运行演示给实验指导教师检查。
1.3 实验容题目二:编写客户端,要求如下:第一级:实现一个基本的文本编辑器,能支持的撰写和保存为草稿。
支持目录结构,能对进行分类,并提供基本的收件箱、发件箱、草稿箱、垃圾箱等文件夹。
计算机网络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将发送缓冲区中的数据发送至客户端。
华科 计算机网络 实验报告1
![华科 计算机网络 实验报告1](https://img.taocdn.com/s3/m/0345840aba1aa8114431d992.png)
电子与信息工程系实验报告实验名称Windows Socket 编程(Duplex-talk)课程名称计算机网络姓名张建佳学号U201013086日期2012-03-21地点南一楼东203成绩教师徐晶1.实验目的1.掌握网络应用程序的开发方法;2.掌握Client/ Server 结构软件的设计与开发方法3.掌握Socket 机制的工作原理2.实验环境操作系统:Windows 7开发环境:Visual Studio 2010,VC63.实验内容与结果2.修改simplex-talk 程序,编制duplex-talk 程序,支持client 和server 的双向通信(1)程序整体功能Client端程序连接Server端程序,Client能给Server发送信息,同时Server也能给Client 发送信息,实现双向通信;(2) 程序组成及各模块/函数功能Client 端传入server端的主机号将server端的主机号转换为IP地址发起一个socket连接请求判断连接是否成功报错,退出NServer发送信息关闭连接接收信息判断信息是否为空YNY监听等到Client 的连接请求建立与Client 的连接判断信息是否为空 NY 退出程序(3)程序清单(见附件) (4)程序的运行和测试结果编译源文件,生成可执行文件并运行,其过程如下: Client 端 Socket 端server.exe[simplex -talk server] server is ready in listening ...client.exe localhost [simplex -talk server] received a connectionfrom 127.0.0.1 :[simplex -talk client] connection to localhost is ready[simplex -talk client] please input your message (empty input to halt): Hello,Server.[simplex -talk client] send 14 chars to server [simplex -talk server] received 14 charsHello,Server.接收信息关闭连接发送信息判断信息是否为空NN判断信息是否为空YY退出程序运行结果截图ClientServer4.实验中的问题暂无附件1.程序源代码(1)socket-client.cSocket-server.c。
华中科技大学计算机网络实验报告
![华中科技大学计算机网络实验报告](https://img.taocdn.com/s3/m/405e4a16fc4ffe473368ab3a.png)
(5) netstat 显示协议统计和当前的 TCP/IP 网络连接。该命令只有在安装了 TCP/IP 协议后才 可以使用。 netstat [-a] [-e] [-n] [-s] [-p protocol] [-r] [interval] 参数 -a 显示所有连接和侦听端口。服务器连接通常不显示。 -e 显示以太网统计。该参数可以与 -s 选项结合使用。 -n 以数字格式显示地址和端口号(而不是尝试查找名称) 。 -s 显示每个协议的统计。 默认情况下,显示 TCP、UDP、 ICMP 和 IP 的统计。-p 选 项可以用来指定默认的子集。 -p protocol 显示由 protocol 指定的协议的连接; protocol 可以是 tcp 或 udp。 如果与 -s 选项一同使用显示每个协议的统计, protocol 可以是 tcp、 udp、 icmp 或 ip。 -r 显示路由表的内容。
8
Net stop:停止 Windows 2000 网络服务。 net stop service 例如:C:\>net stop messenger Messenger 服务正在停止. Messenger 服务已成功停止。 此时再打入 net send 本机名 消息,就没用了;相应的,要打开这个服 务,只需把 stop 改为 start,就可以了。 Net start FTP Publishing Service 启动 FTP 发布服务。该命令只有在安装了 Internet 信息服务后才可用。 net start "ftp publishing service" 类似的命令有很多,请参考帮助文件。
5
IP Address. . . . . . . . . . . . : 10.111.142.71 //IP 地址 Subnet Mask . . . . . . . . . . . : 255.255.255.0 //子网掩码 Default Gateway . . . . . . . . . : 10.111.142.1 //缺省网关 C:\>ipconfig /displaydns //显示本机上的 DNS 域名解析列表 C:\>ipconfig /flushdns //删除本机上的 DNS 域名解析列表
计网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、总结与分析本次实验达到了本项实验的初始目的和要求。
计算机网络实验(华科)
![计算机网络实验(华科)](https://img.taocdn.com/s3/m/8645403843323968011c92b8.png)
实验内容:
⑴
ARP:
显示和修改 IP 地址与物理地址之间的转换表 指令:arp -a >>g:\显示当前的 ARP 信息.txt 接口: 222.20.69.237 --- 0xd Internet 地址 物理地址 类型 222.20.69.254 00-1a-a9-15-6c-8f 动态 222.20.69.255 ff-ff-ff-ff-ff-ff 静态 224.0.0.2 01-00-5e-00-00-02 静态 224.0.0.22 01-00-5e-00-00-16 静态 224.0.0.100 01-00-5e-00-00-64 静态 224.0.0.251 01-00-5e-00-00-fb 静态 224.0.0.252 01-00-5e-00-00-fc 静态 224.0.0.253 01-00-5e-00-00-fd 静态 224.0.1.242 01-00-5e-00-01-f2 静态 238.184.9.123 01-00-5e-38-09-7b 静态 239.192.152.143 01-00-5e-40-98-8f 静态 239.255.255.239 01-00-5e-7f-ff-ef 静态 指令:arp -a 222.20.69.254 >>g:\显示指定网络地址的 ARP 信息.txt 接口: 222.20.69.237 --- 0xd Internet 地址 物理地址 类型 222.20.69.254 00-1a-a9-15-6c-8f 动态
计算机网络课程 实验报告
实验 1 : 常用网络命令
姓名 实验地点 实验课表现 实验目的: 张京林 院系 南六楼 出勤、表现得分 操作结果得分 自动化学院 实验时间 实验报告 得分 学号 U201013680 4 月 21 日 实验总分
socket编程实验报告
![socket编程实验报告](https://img.taocdn.com/s3/m/e18cf034af45b307e87197ff.png)
计算机网络实验题目:Socket编程实验1 基于UDP的Socket编程实验2 基于TCP的Socket编程姓名:学号:学院:年级:实验时间:目录一、实验内容: (3)实验1 基于UDP的Socket编程 (3)实验2 基于TCP的Socket编程 (3)二、程序设计 (3)1 基于UDP的Socket编程 (3)1.1 实验原理:基于UDP协议的无连接C/S的工作流程 (3)1.2 实现方案和实验结果 (4)1.2.1 方案1:Linux上两个进程间的通信 (4)方案1实现方案 (4)方案1实验结果 (4)1.2.2 方案2:Windows主机(client)和Linux虚拟机(server)之间的进程通信 6方案2实现方案 (6)方案2实验结果 (6)2 基于TCP的Socket编程 (7)2.1 实验原理:基于TCP协议的面向C/S的工作流程 (7)2.2 实现方案 (8)2.3 实验结果 (9)三、讨论与心得 (10)四、源代码 (12)一、实验内容:本单元实验包括的实验项目主要是UDP Socket编程和TCP Socket编程。
本单元实验的主要目的是希望通过本单元实验,让学员掌握Socket编程方法,同时通过本单元实验让学生掌握如何开发基于TCP/IP协议的网络应用。
实验1 基于UDP的Socket编程●实验目的:通过本实验使学员了解和掌握编写基于UDP协议的网络应用程序。
●实验内容:编写基于UDP协议网络聊天程序,要求发送程序和接收程序能够接收键盘输入并彼此之间相互发送数据。
●实验步骤:1.编写server端程序;2.编写client端程序;3.client程序与server程序联调;4.client程序与server程序相互通信。
实验2 基于TCP的Socket编程●实验目的:通过本实验使学员了解和掌握编写基于TCP协议的网络应用程序。
●实验内容:编写基于TCP协议网络聊天程序,要求发送程序和接收程序能够接收键盘输入并彼此之间相互发送数据。
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()```实验结果通过运行客户端和服务器端的代码,可以实现客户端向服务器发送消息,并接收服务器返回的消息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子与信息工程系
实验报告
实验名称WinSocket编程实验课程名称计算机网络
姓名郭世康学号U201313639
日期20151220 地点南一楼东204 成绩教师刘威
1.实验目的
1.掌握网络应用程序的开发方法;
2.掌握 Client/ Server 结构软件的设计与开发方法
3.掌握 Socket 机制的工作原理
4.实现server-client双向通信、client超时重传过程
2.实验环境
Windows7.0,集成开发环境codeblocks,simple-talk例程代码
3.实验内容与结果
(1)运行simplex-talk 例程,理解代码并观察现象
(2)修改simplex-talk程序,编制duplex-talk程序,支持client和server 的双向通信
程序整体功能:实现客户端与服务器的双向通信。
程序组成及各模块功能:程序由若干模块组成:主要为检查模块,检查是否出错以及是否与服务器/客户端建立了链接;传输数据模块,客户端向服务器发送数据和接受服务器发送的消息以及服务器接收数据及发送数据;关闭连接模块,断开客户端与服务器的链接;
重要的数据结构: WSADATA,hostent,sockaddr_in等数据结构;
程序清单:见附件;
运行及测试结果:
(3)利用windows时间函数,编制一个简单的定时器,模拟client和server之间的stop-and-wait
程序整体功能:实现客户端与服务器之间的stop-and-wait动作,其中延时设置为2s,主要实现方法为server收到client发过来的数据后不回传ACK,导致client 以为server没有收到,然后在延时过后重传数据;
程序组成及各模块功能:程序由若干模块组成,主要为检查模块,检查是否出错以及是否与服务器/客户端建立了链接;传输数据模块,客户端向服务器发送数据和接受服务器发送的消息以及服务器接收数据及发送数据;关闭连接模块,断开客户端与服务器的链接;
重要的数据结构: WSADATA,hostent,sockaddr_in等数据结构;
程序清单:见附件;
运行及测试结果:
4.思考题
无
5.实验中的问题
在刚开始时示例代码看不懂,弄懂simplex-talk都花了大量的时间和精力。
其中recv、accept、send等函数弄明白参量都花费了大量的精力,然而并没有弄明白其中参量的具体意义,导致现在整个实验做完了都不是很清楚。
代码看的不是很懂,更不要说写代码了。
在同学的帮助下我弄明白了这个程序的的大致模块分布和一些基本的算法思想,并且参考了大量同学的代码,其中还咨询了一些学长和学姐,总算有了一个整个的思路。
然而在开始编写的时候又遇到了麻烦:CodeBlocks下的环境配置。
运行示例代码的时候就出错,上网百度了好久都没有解决。
这个问题就困扰了我大半天的时间,搞得我烦不胜烦,都不想搞了。
最后还是隗巍同学告诉了我lib文件的导入方法及过程,环境配置才得以成功。
在编写代码的过程中,出现了N多次错误,一些函数更是不知道怎么使用,例如send、recv,在参考了同学的代码之后,总算有了一点头绪。
后面服务器接口的使用也困扰了好久,后面学长提醒才知道,服务器用于连接请求和数据传输的端口要分开使用。
服务器开放一个接口(s)用于监听来自客户端的连接请求,在建立连接后,会另外开放一个接口(new_s)用于和客户端通信,而原先的接口则用来处理其他客户端的连接请求。
写了半天,终于写好了,编译链接也没有问题,然而实际运行的时候又崩盘了。
不是client发出结果server收不到就是server 发出结果client收不到。
然后写写改改,改改写写,终于收到,然后运行,结果。
呵呵呵呵,程序卡住,停止运行,当时就想砸电脑,忍住了,又回去看代码哪里错了,找来找去找了半天结果发现有一个printf的输出错了导致程序崩溃,那时候还不确定,试着把它去了结果运行成功,当时的心情就跟吃了人参果一样,全身上下渗透着一种舒爽,恨不得仰天长啸三声。
总之这个实验做成之前有一种想死的感觉,后面解决了问题之后又很爽,不过说实话,整个实验完了之后我还有一种云里雾里的感觉,有好多地方没有很清楚的弄明白,但是结果还是差强人意,最后还是完成了一些要求的功能,还是很开心的。
附件
1. 程序源代码
2. 参考文献列表。