实验七简单的服务器客户端程序实验报告
TCP和UDP客户端及服务器端实验报告

TCP和UDP客户端及服务器端实验报告一、原理1.基于TCP协议的服务器端程序流程:1)创建套接字(socket)2)绑定套接字(bind)3)将套接字设为监听,准备接收客户请求(listen)4)等待客户请求的到来,当请求到来后,接受请求,返回一个对应于此次连接的套接字(accept)5)用返回的套接字与客户端进行通信(send/recv)6)返回,等待另一客户请求7)关闭套接字2.基于TCP协议的客户端程序流程1)创建套接字(socket)2)向服务器发出连接请求(connect)3)和服务器端进行通信(send/recv)4)关闭套接字在服务器端调用accept函数时,程序就会等待客户端调用connect函数发出连接请求,然后接收请求,于是双方就建立了连接,之后,服务器端和客户端就可以利用send和recv函数进行通信了。
3.基于UDP的服务器端编写1)创建套接字(socket)2)绑定(bind)3)等待接收数据(recvfrom)4)关闭套接字4.基于UDP的客户端编写1)创建套接字(socket)2)向服务器发送数据(sendto)3)关闭套接字在所有的套接字编程中第一步都是加载套接字库(WSAStartup)对于每一个WSAStartup函数的成功调用,在最后都要对应一个WSACleanUp调用。
TCP代码实现:首先要建两个工程,不妨设为tcpsrv和tcpclient,分别为客户端和服务器端tcpsrv.cpp//TCP server//listen port 9102//receive string and display it//Visual C++ 6.0#include <stdio.h>#include <winsock2.h>#pragma comment(lib,"ws2_32.lib")#define BUFLEN 1024int main(){SOCKET serversoc;SOCKET clientsoc;SOCKADDR_IN serveraddr;SOCKADDR_IN clientaddr;char buf[BUFLEN];int len;WSADATA wsa;WSAStartup(MAKEWORD(1,1),&wsa);//initial Ws2_32.dll by a processif((serversoc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) <= 0)//create a tcp socket {printf("Create socket fail!\n");return -1;}serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(9102);serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);if(bind(serversoc, (SOCKADDR *)&serveraddr, sizeof(serveraddr)) != 0){printf("Bind fail!\n");return -1;}//start listen, maximum length of the queue of pending connections is 1printf("Start listen...\n");if(listen(serversoc, 1) != 0){printf("Listen fail!\n");return -1;}len = sizeof(SOCKADDR_IN);//waiting for connectingif((clientsoc = accept(serversoc, (SOCKADDR *)&clientaddr, &len))<=0) {printf("Accept fail!\n");return -1;}printf("Connected\n");while(1){//waiting for data receiveif(recv(clientsoc, buf, BUFLEN, 0) <= 0){//some error occurprintf("Close connection\n");closesocket(clientsoc);break;}printf("%s\n",buf);}WSACleanup(); //clean up Ws2_32.dllreturn 0;}相应的客户端程序,tcpclient.cpp//TCP client//client send string to server//Visual C++ 6.0#include <stdio.h>#include <winsock2.h>#pragma comment(lib,"ws2_32.lib")int main(){SOCKET soc;SOCKADDR_IN serveraddr;SOCKADDR_IN clientaddr;unsigned char buf[1024];WSADATA wsa;WSAStartup(MAKEWORD(1,1),&wsa);//initial Ws2_32.dll by a processif((soc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) <= 0)//create a tcp socket {printf("Create socket fail!\n");return -1;}serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(9102);serveraddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//connect to serverprintf("Try to connect...\n");if(connect(soc, (SOCKADDR *)&serveraddr, sizeof(serveraddr)) != 0){printf("Connect fail!\n");return -1;}printf("Connected\n");while(1){scanf("%s", buf);//send to serverif(send(soc, buf, strlen(buf)+1, 0)<=0){printf("Error!\n");}}WSACleanup(); //clean up Ws2_32.dllreturn 0;}UDP服务器端://UDP server//listen port 9102//receive string and display it//Visual C++ 6.0#include <stdio.h>#include <winsock2.h>#pragma comment(lib,"ws2_32.lib")#define BUFLEN 1024int main(void){SOCKET soc;SOCKADDR_IN addr;char buf[BUFLEN];int len;WSADATA wsa;WSAStartup(MAKEWORD(1,1),&wsa);//initial Ws2_32.dll by a process memset(&addr, 0, sizeof(addr));if((soc = socket(AF_INET,SOCK_DGRAM,0)) <= 0){printf("Create socket fail!\n");return -1;}addr.sin_family = AF_INET;addr.sin_port = htons(9102);addr.sin_addr.s_addr = htonl(INADDR_ANY);if(bind(soc,(struct sockaddr *)&addr,sizeof(struct sockaddr))!=0){printf("Bind fail!\n");return -1;}len = sizeof(addr);printf("start listen...\n");while(1) {recvfrom(soc, buf, BUFLEN, 0,(struct sockaddr*)&addr, &len);printf("%s\n",buf);}WSACleanup(); //关闭return 0;}客户端://UDP client//client send string to server//Visual C++ 6.0#include <stdio.h>#include <winsock2.h>#pragma comment(lib,"ws2_32.lib")#define BUFLEN 1024int main(void){SOCKET soc;SOCKADDR_IN addr;unsigned char buf[BUFLEN];WSADATA wsa;WSAStartup(MAKEWORD(2,2),&wsa);//initial Ws2_32.dll by a processmemset(&addr, 0, sizeof(addr));if((soc = socket(AF_INET,SOCK_DGRAM,0)) <= 0){printf("Create socket fail!\n");return -1;}addr.sin_family = AF_INET;addr.sin_addr.s_addr = inet_addr("127.0.0.1");addr.sin_port = htons(9102);bind(soc,(struct sockaddr *)&addr,sizeof(addr));while(1) {scanf("%s", buf);sendto(soc, buf, strlen(buf)+1, 0, (struct sockaddr *)&addr, sizeof(addr));}WSACleanup();//clean up Ws2_32.dllreturn 0;}。
简单Web Server实现、电子邮件客户端实验报告

一.简单Web Server实现1.引言1.1实验目的通过本实验,熟悉Web Server的安装和配置过程,进一步理解其工作原理。
1.2 介绍WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。
WWW 是Internet 的多媒体信息查询工具,是Internet 上近年才发展起来的服务,也是发展最快和目前用的最广泛的服务。
正是因为有了WWW工具,才使得近年来Internet 迅速发展,且用户数量飞速增长。
2.任务概述2.1实验目标实现一个Web Server的基本功能,用户通过Chrome等浏览器向服务器端发出网页请求,服务器端接到请求,向用户返回用户所需的网页。
同时通信记录在服务器端记录现实。
2.2运行环境需求Win7,cmd。
3.工作原理http协议使Web服务器和浏览器可以通过Web交换数据。
它是一种请求/响应协议,即服务器等待并响应客户方请求。
H T T P不维护与客户方的连接,它使用可靠的T C P连接。
客户/服务器传输过程可分为四个基一步骤:1 浏览器与服务器建立连接;2 浏览器向服务器请求文档;3 服务器响应浏览器请求;4 断开连接。
4. 程序演示1、运行程序WebServer.java图1:运行WebServer.java效果2、访问服务器URL:http://localhost:8080/图2:访问服务器URL:http://localhost:8080/效果3、服务器端:图3:用户访问之后服务器端效果5. 程序代码://WebServer.java WebServer是服务器主线程类import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import .InetAddress;import .ServerSocket;import .Socket;public class WebServer {//设置静态资源的目录public static final String WEB_ROOT=System.getProperty("user.dir")+File.separator;//设置关闭命令private static final String SHUTDOWN_COMMAND="/SHUTDOWN";private boolean shutdown=false;public static void main(String[] args) {WebServer server=new WebServer();server.await();}public void await() {ServerSocket serverSocket=null;//监听8080端口int port=8080;try {serverSocket=new ServerSocket(port, 1, InetAddress.getByName("127.0.0.1"));} catch (IOException e) {e.printStackTrace();System.exit(1);}//循环等待客户端连接while (!shutdown) {Socket socket=null;InputStream inputStream=null;OutputStream outputStream=null;System.out.println("Web Server is listening on port "+serverSocket.getLocalPort());try {socket=serverSocket.accept();//当有客户端连接时inputStream=socket.getInputStream();//获取请求字符流outputStream=socket.getOutputStream();//输出流//处理客户端请求---RequestRequest request=new Request(inputStream);request.parse();//向客户端发送ResponseResponse response=new Response(outputStream);response.setRequest(request);response.sendStaticResource();//关闭socketsocket.close();//检查如果是shutdown命令,关闭服务器shutdown=request.getUri().equals(SHUTDOWN_COMMAND);} catch (Exception e) {e.printStackTrace();continue;}}}}//Request.java 响应HTTP协议中的Requestimport java.io.IOException;import java.io.InputStream;public class Request {private InputStream inputStream;private String uri;public String getUri() {return uri;}public void setUri(String uri) {this.uri = uri;}public Request(InputStream inputStream) {this.inputStream=inputStream;}public void parse() {//从socket读取字符StringBuffer request=new StringBuffer(2048);int i;byte[] buffer=new byte[2048];try {i=inputStream.read(buffer);} catch (IOException e) {e.printStackTrace();i=-1;}for (int j = 0; j < i; j++) {request.append((char)buffer[j]);}System.out.println(request.toString());uri=parseUri(request.toString());}/*** 从客户端请求字符串中截取请求资源uri* @param requeString 请求字符串,包括请求头、请求方法、请求资源的uri * @return 请求资源的uri*/private String parseUri(String requeString){int index1,index2;//比如GET /index.html HTTP/1.1//请求方法、请求资源、版本之间以空格隔开index1=requeString.indexOf(' ');if (index1!=-1) {index2=requeString.indexOf(' ', index1+1);if (index2>index1) {return requeString.substring(index1+1, index2);}}return null;}}//Response.java 响应HTTP协议中的Responseimport java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;public class Response {private static final int BUFFER_SIZE=1024;Request request;OutputStream outputStream;public Response(OutputStream outputStream) {this.outputStream=outputStream;}public void setRequest(Request request) {this.request=request;}//发送静态资源public void sendStaticResource() throws IOException {byte[] bytes=new byte[BUFFER_SIZE];FileInputStream fis=null;try {File file=new File(WebServer.WEB_ROOT, request.getUri()); if (file.exists()) {//如果请求的静态资源文件存在fis=new FileInputStream(file);int ch=fis.read(bytes, 0, BUFFER_SIZE);while (ch!=-1) {outputStream.write(bytes, 0, ch);ch=fis.read(bytes, 0, BUFFER_SIZE);}}else {//如果静态资源不存在String errorMessage="HTTP/1.1 404 File Not Found\r\n"+ "Content-Type:test/html\r\n"+"Content-Length:23\r\n"+"\r\n"+"<h1>File Not Found</h1>";outputStream.write(errorMessage.getBytes());}} catch (Exception e) {System.out.println(e.toString());}finally{if (fis!=null) {fis.close();}}}}6. 实验心得:通过本次实验,我锻炼了自己的上机操作能力,并对理论知识有了进一步的理解,了解并掌握了简单WebServer的安装与配置过程,并对客户服务器模式的内部运行有了进一步的理解。
TCPUDP客户服务器实验报告

《计算机网络》课程综合实验报告之TCP/UDP服务器端和客户端程序设计院系:信息工程学院专业:电子信息工程姓名:荆林风学号:20142410232一、实验目的学习和掌握Linux环境下的TCP和UDP通信服务器和客户端的基本编程方法和运行机制,掌握TCP/UDP报文段的通信过程。
二、实验平台win10操作系统下VMware Workstation工作环境下linux虚拟机,ubuntu操作系统三、实验内容1..编写Linux下TCP/UDP服务器套接字程序,程序运行时服务器等待客户的连接,一旦连接成功,则显示客户的IP地址、端口号,并向客户端发送字符串。
2.编写Linux下TCP/UDP客户端套接字程序,结合实验一的服务器端程序,实现以下功能:1客户根据用户提供的IP地址连接到相应的服务器;2服务器等待客户的连接,一旦连接成功,则显示客户的IP 地址、端口号,并向客户端发送字符串;3客户接收服务器发送的信息并显示。
四、实验原理使用TCP套接字编程可以实现基于TCP/IP协议的面向连接的通信,它分为服务器端和客户端两部分,其主要实现过程如图1.1所示。
1、socket函数:为了执行网络输入输出,一个进程必须做的第一件事就是调用socket函数获得一个文件描述符。
-----------------------------------------------------------------#include<sys/socket.h>int socket(int family,int type,int protocol);返回:非负描述字---成功-1---失败-----------------------------------------------------------------第一个参数指明了协议簇,目前支持5种协议簇,最常用的有AF_INET(IPv4协议)和AF_INET6(IPv6协议);第二个参数指明套接口类型,有三种类型可选:SOCK_STREAM(字节流套接口)、SOCK_DGRAM(数据报套接口)和SOCK_RAW(原始套接口);如果套接口类型不是原始套接口,那么第三个参数就为0。
完整word版试验七简单的服务器客户端程序试验报告

关闭套接字对话
closesocket(),关闭最初套接字closesocket(),
1 / 10
程序分两部分:客户程序和服务器程序。服务器首先启动,它创建套接字之后等待客户的连接;客户启动后工作过程是:
创建套接字,然后和服务器建立连接;建立连接后,客户接收键盘输入,然后将数据发送到服务器,服务器收到到数据后,将接收到的字符在屏幕上显示出来。或者服务器接收键盘输入,然后将数据发送到客户机,客户机收到数据后,将接收到的字符在屏幕上显示出来。
SOCKET sock1,sock2;
int sin_size ;
struct sockaddr_in my_addr,their_addr;
char name[20];
Tcp //初始化函数void Init()
{
TCP\n\n\n); Server: printf(\
\n\n
//建立套接字
const WORD wMinver=0x0101;
ServerClient端与端的一段对话程序。TCP3、编写用协议实现端下一步将要进行操作。入来提示Client
Socket(),建立流失套接字,返回套接字号
将套接字与远地主机连接
send()/recv(),写数据,直到数据交换完/
在套接字上读
closesocket(),结束UDP
关闭套接字对话
端根据用户的输Server
Accepting a new connet:%s,inet_ntoa(their_addr.sin_addr));
printf(
}
//选择菜单int menu()
{
char *s=(char*)malloc(2*sizeof(char));
网络编程实验报告

网络编程实验报告网络编程实验报告引言网络编程是计算机科学领域中的一个重要分支,它涉及到计算机网络的通信原理、网络协议以及数据传输等方面的知识。
本次实验旨在通过实际操作,加深对网络编程的理解,并掌握基本的网络编程技巧。
一、实验目的本次实验的主要目的是通过使用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. 创建客户端接下来,我们需要创建一个客户端的程序,用于向服务器端发送请求并接收响应。
web服务器实验报告

web服务器实验报告Web服务器实验报告一、引言随着互联网的迅猛发展,Web服务器作为互联网的基础设施之一,扮演着至关重要的角色。
本实验旨在通过搭建一个简单的Web服务器,深入了解Web服务器的工作原理和相关技术。
二、实验目的1. 了解Web服务器的基本概念和作用;2. 掌握Web服务器的搭建和配置方法;3. 理解HTTP协议的工作原理;4. 学习使用服务器端脚本语言进行动态网页开发。
三、实验环境1. 操作系统:Windows 10;2. 服务器软件:Apache HTTP Server;3. 开发工具:Sublime Text。
四、实验步骤1. 下载和安装Apache HTTP Server软件;2. 配置服务器的基本信息,如监听端口、根目录等;3. 创建静态网页文件,并将其放置在服务器的根目录下;4. 启动服务器,通过浏览器访问静态网页文件,验证服务器的正常运行;5. 学习使用服务器端脚本语言(如PHP、Python等)进行动态网页开发;6. 创建动态网页文件,并将其放置在服务器的根目录下;7. 配置服务器支持服务器端脚本语言,并启动服务器;8. 通过浏览器访问动态网页文件,验证服务器对服务器端脚本语言的支持。
五、实验结果与分析1. 静态网页访问:通过浏览器输入服务器的IP地址和端口号,成功访问到放置在服务器根目录下的静态网页文件。
说明服务器的基本配置和静态网页的放置是正确的。
2. 动态网页访问:通过浏览器输入服务器的IP地址和端口号,成功访问到放置在服务器根目录下的动态网页文件。
动态网页中的服务器端脚本语言被成功解析和执行,返回了动态生成的内容。
说明服务器对服务器端脚本语言的支持配置正确。
六、实验心得通过本次实验,我深入了解了Web服务器的工作原理和相关技术。
搭建和配置一个简单的Web服务器不仅加深了我对服务器软件的理解,还让我对HTTP协议有了更深刻的认识。
同时,学习使用服务器端脚本语言进行动态网页开发,为我后续的Web开发工作打下了坚实的基础。
服务器配置实验报告

实验一远程登录一、给安装好的虚拟机修改计算机名字(1)点击我的电脑的属性,选择计算机名的一项,给计算机修改名字(2)输入自己修改的名字为yan(3)这样就修改好了。
需要重新启动一下电脑,这样新的计算机名字就生效了二、给电脑配置IP地址(1)打开网络连接的属性,点击internet的属性配置IP地址(2)配置好了可以在DOS下进行测试,可以看到可以PING通三、进行远程登录的设置(1)打开我的电脑的管理,进行用户的创建(2)新建用户C(3)打开我的电脑的属性。
选择远程(4)将用户C设置为远程登录的用户(5)可以看到这个有两个用户可以远程登录(6)在客户端上选择远程桌面,输入要远程电脑的名称(7)输入刚才创建的C用户(8)这样就成功地登录到了主机上了实验二磁盘管理(1)在运行中打mmc,进行磁盘管理的添加(2)选择添加磁盘管理(3)添加完成后打开控制台可以看到所有初始状态(4)配置磁盘,给动态磁盘新建卷,右击未指定的空间(5)选择新建的卷名为简单(6)这个卷的文件系统选择为ntfs(7)这样就完成了简单卷的创建(8)再在这个盘上新建跨区卷(9)将磁盘1和磁盘3添加进去,这样就完成了跨区卷的设置(10)用同样的方法设置带区卷,添加磁盘1和磁盘4(11)同样,镜像卷这是同样的设置(12)新建RAID-5卷(13)将所有的磁盘都进行RAID-5的划分(14)指派驱动器的号为J(15)这样就对磁盘的划分完成了(16)更改F盘属性的配额设置(17)在本地用户上新添加新的用户b,用非管理员的的身份登录,超出磁盘配额就会有提示(18)这样就提示出错了,因为超出了磁盘的范围(19)管理员可以查看警告信息,在配额下选配(额项,双击警告20)显示警告信息,可以在这里直接修改对a用户配额的限制范围(21)查看磁盘删除后,各种类型的动态卷是否可恢复。
关闭计算机,虚拟机设置,选中要删除的磁盘,移除(根据RAD5的属性,移除一个,并同时再添加一个盘)。
TCP UDP客户服务器实验报告

《计算机网络》课程综合实验报告之TCP/UDP服务器端和客户端程序设计院系:信息工程学院专业:电子信息工程姓名:荆林风学号:20142410232一、实验目的学习和掌握Linux环境下的TCP和UDP通信服务器和客户端的基本编程方法和运行机制,掌握TCP/UDP报文段的通信过程。
二、实验平台win10操作系统下VMware Workstation工作环境下linux虚拟机,ubuntu操作系统三、实验内容1..编写Linux下TCP/UDP服务器套接字程序,程序运行时服务器等待客户的连接,一旦连接成功,则显示客户的IP地址、端口号,并向客户端发送字符串。
2.编写Linux下TCP/UDP客户端套接字程序,结合实验一的服务器端程序,实现以下功能:1客户根据用户提供的IP地址连接到相应的服务器;2服务器等待客户的连接,一旦连接成功,则显示客户的IP 地址、端口号,并向客户端发送字符串;3客户接收服务器发送的信息并显示。
四、实验原理使用TCP套接字编程可以实现基于TCP/IP协议的面向连接的通信,它分为服务器端和客户端两部分,其主要实现过程如图1.1所示。
1、socket函数:为了执行网络输入输出,一个进程必须做的第一件事就是调用socket函数获得一个文件描述符。
-----------------------------------------------------------------#include<sys/socket.h>int socket(int family,int type,int protocol);返回:非负描述字---成功-1---失败-----------------------------------------------------------------第一个参数指明了协议簇,目前支持5种协议簇,最常用的有AF_INET(IPv4协议)和AF_INET6(IPv6协议);第二个参数指明套接口类型,有三种类型可选:SOCK_STREAM(字节流套接口)、SOCK_DGRAM(数据报套接口)和SOCK_RAW(原始套接口);如果套接口类型不是原始套接口,那么第三个参数就为0。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
洛阳理工学院实验报告
101/
10/2.
实验内容:
端代码:Sever定义控制台应用程序的入口点。
://server.cpp
<winsock.h>#include<windows.h>#include<stdio.h>#include<stdlib.h>#include
WS2_32)comment(lib,#pragma
sock1,sock2;SOCKET
;sin_size int
my_addr,their_addr;sockaddr_in struct
name[20];char
Tcp//初始化函数Init()void{
TCP\n\n\n);printf(\
\n\nServer:建立套接字//wMinver=0x0101;const WORD wsadata;WSADA TA if(0!=::WSAStartup(wMinver,&wsadata)) error!);socket perror(Start
ALID_SOCKET==(sock1=::socket(AF_INET,SOCK_STREAM,0)))if(INV error!);socketperror(Create
my_addr.sin_family=AF_INET;my_addr.sin_addr.S_un.S_addr=INADDR_ANY;my_addr.sin_port=htons(1000); sockaddr*)&my_addr,sizeof(my_addr)))if(SOCKET_ERROR==::bind(sock1,(struct{socket);stream perror(Binding
exit(1);}
开始侦听//if(SOCKET_ERROR==::listen(sock1,5)){socket);perror(Listening stream exit(1);10/3.
}接受连接//connect...\n\n\n);client.Please to serve牰湩晴尨Ready sockaddr_in);=sizeof(structsin_size
*)&their_addr,&sin_size))==-1)sockaddrif((sock2=accept(sock1,(struct{socket);streamperror(Accepting exit(1);} connet:%s,inet_ntoa(their_addr.sin_addr));new Accepting a牰湩晴尨}选择菜单//menu()int
{*s=(char*)malloc(2*sizeof(char));char
c;int
Menu\n\n\n);printf(\
\n\nServer:*********************************\n\n);牰湩晴尨*\n);Message牰湩晴尨*1.Send
*\n);2.ReceiveMessage牰湩晴尨**\n\n);*牰湩晴尨3.Exit*********************************\n);牰湩晴尨do {choice:);yourprintf(\
Enter gets(s);if(s[0]=='\0'){gets(s);}c=atoi(s);}while(c<0||c>3);free(s);c;return
}
消息发送函数//Send()void
{Msg[10240];char message:);the printf(\
PleaseInput
gets(Msg);Msg[10239]='\0';
10/4.
::send(sock2,Msg,strlen(Msg),0);
}
消息接收函数//Receive()void
{len;int
buf[10240];char i=0;i<10240;i++){for(int buf[i]='\0';}
if((len=::recv(sock2,buf,10240,0))==-1){error);perror(Receving data
exit(1);}Message:%s\n,buf);printf(The Received
}主函数//main()void
{Init();for(;;){switch(menu()){1:case Send();break;2:case
Receive();break;3:case exit(0);}}
//::closesocket(sock2);::closesocket(sock1);
10/5.
::WSACleanup();}
端代码:Client//定义控制台应用程序的入口点。
://client.cpp
<winsock.h>#include<windows.h>#include<stdio.h>#include<stdlib.h>#include
WS2_32)comment(lib,#pragma
sock1,sock2;SOCKET
;sin_size int
my_addr,their_addr;sockaddr_in struct
name[20];char
Tcp//初始化函数Init()void{TCP\n\n\n);printf(\
\n\nClient:建立套接字//wMinver=0x0101;const WORD wsadata;
WSADA TA if(0!=::WSAStartup(wMinver,&wsadata))
perror(Start socket error!);
if(INVALID_SOCKET==(sock1=::socket(AF_INET,SOCK_STREAM,0))) perror(Create socket error!);
my_addr.sin_family=AF_INET;
my_addr.sin_addr.S_un.S_addr=inet_addr(92.168.93.48);
my_addr.sin_port=htons(1000);
//请求连接
牰湩晴尨connecting...);
sin_size=sizeof(struct sockaddr_in);
if(sock2=(::connect(sock1,(LPSOCKADDR)&my_addr,sin_size))==-1)
{
perror(Accepting stream socket);
exit(1);
}
}
10/6.
//选择菜单
int menu()
{
char*s=(char*)malloc(2*sizeof(char));
int c;
printf(\
\n\n Client:
Menu\n\n\n);牰湩晴尨*********************************\n\n);*1.Send Message牰湩晴尨*\n);Message* 2.Receive牰湩晴尨
*\n);3.Exit*牰湩晴尨*\n\n);牰湩晴尨*********************************\n);do {choice:);your printf(\
Enter gets(s);if(s[0]=='\0'){gets(s);}c=atoi(s);}while(c<0||c>3);free(s);return c;}消息发送函数// void Send(){Msg[10240];char
message:);theInputprintf(\
Please
gets(Msg);Msg[10239]='\0';::send(sock1,Msg,strlen(Msg),0);
}//消息接收函数voidReceive(){
10/7.
int len;
char buf[10240];
for(int i=0;i<10240;i++){
buf[i]='\0';
}
if((len=::recv(sock1,buf,10240,0))==-1)
{
perror(Receving data error);
exit(1);
}
printf(The Received Message:%s\n,buf);
}
//主函数
void main()
{
Init();
for(;;)
{
switch(menu())
{
case1:
Send();
break;
case2:
Receive();
break;
case3:
exit(0);
}
}
::closesocket(sock2);
::closesocket(sock1);
::WSACleanup();
}
10/8.
实验结果
Server端界面:发送信息
Server端界面:接收信息
10/9.
实验总结
在老师的精心指导和自己的努力下最终成功完成了本次的实验内容,虽然在
过程中遇到好多问题,在老师和同学们的帮助下最后顺利完成。
在此试验中通过老师的讲解和自己的动手操作,通过本次实验我了解了一些路由器的基本配置,
也学会使用了子网划分的一些基本知识,对计算机网络的学习更加感兴趣。
10/10。