socket网络编程 实验报告
大连民族学院
计算机科学与工程学院
实验报告
实验题目: socket编程综合实验
课程名称:网络编程技术
实验类型:□演示性□验证性□操作性□设计性■综合性
专业:软件工程班级:2010-2 姓名:杨腾飞学号:2010082225 实验日期:2013年5月13日实验地点:多媒体机房(1)
实验学时:4 实验成绩:
指导教师签字: 2013 年 5 月 28 日
一实验目的与要求
实验目的:
认真阅读课程代码,并在通信功能之上设计和实现一个简单的聊天程序。
实验内容:
练习使用socket编写客户/服务程序,掌握socket的使用方法,熟悉并掌握多线程的概念
二总的设计思想及语言
编程语言:C
设计思想:让客户端与服务器建立链接即可通信,服务端建立套接字的大致步骤:
1.建立socket。
2。
bind 绑定特定的端口。
3。
listen 监听特定的端口。
4.accept,当有客户端连接服务器端口时,accept接收信息,并返回新的套接字描述符,提供给操作 5.根据实际需求,write,read,send,recv等操作6.关闭套接字。
客户端大致步骤:
1.创建socket.
2.根据服务器地址,connect连接到特定服务器。
3.write,read等读写操作。
4.关闭套接字。
三源程序
/****************************服务器端*********************/
#include<winsock2.h>
#include<stdio.h>
#include<string.h>
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,6);
char sendBuf[100];
char recvBuf[100];
char tempBuf[100];
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while(1)
{
printf("waiting for client\n");
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); recv(sockConn,tempBuf,100,0);
if(tempBuf[0]!='q')
{
sprintf(recvBuf,"%s say: %s",inet_ntoa(addrClient.sin_addr),tempBuf); printf("%s\n",recvBuf);
printf("please input your data,server:\n");
gets(sendBuf);
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
}
else
{
printf("%s request to quit the chat platform",inet_ntoa(addrClient.sin_addr)); send(sockConn,"q",strlen("q")+1,0);
closesocket(sockConn);
break;
}
}
closesocket(sockSrv);
WSACleanup();
}
/****************************客户端*********************/
#include<winsock2.h>
#include<stdio.h>
#include<string.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)
{
return;
}
while(1)
{
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0); 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);
char sendBuf[100];
char tempBuf[100];
char recvBuf[100];
int len=sizeof(SOCKADDR);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
printf("please input your data,client:\n");
gets(sendBuf);
printf("waiting for server\n");
send(sockClient,sendBuf,sizeof(sendBuf)+1,0);
recv(sockClient,tempBuf,100,0);
if(tempBuf[0]!='q')
{
sprintf(recvBuf,"server say: %s",tempBuf);
printf("%s\n",recvBuf);
}
else
{
printf("the server has been closed!\n");
send(sockClient,"q",strlen("q")+1,0);
break;
}
}
// closesocket(sockClient);
WSACleanup();
}
四自我评价与总结
此次实验是对Socket的一个应用,让我更深的了解了Socket 函数的作用及使用方法。
通过这次实验能够感受到网络在实际当中的运用,使我对网络编程有了更深的概念。
同时让我发现自己知识结构的欠缺。
虽然基本功能已经实现,但还是存在很多不稳定的问题尚待解决。
实验过程中遇到了很多的问题,例如:程序只能通信一次。
刚开始我以为建立的socket套接口只要建立一次并更新连接地址就可以多次使用。
当初不知道问题存在的在于这,在程序加入很多错误报告代码,发现再客户端再次connect的时候返回负值。
在网上查看很多相关代码之后,发现问题所在,把建立socket的代码写进客户端的循环体中,每次通信都重新建立socket套接口就可以了。
socket编程 实验报告
socket编程实验报告《Socket编程实验报告》在计算机网络通信中,Socket编程是一种常见的通信方式,它可以在不同的计算机之间实现数据的传输和通信。
本次实验旨在通过Socket编程实现一个简单的客户端和服务器端通信,并对其进行测试和分析。
实验环境:- 操作系统:Windows 10- 开发工具:Visual Studio Code- 编程语言:Python实验步骤:1. 设计客户端和服务器端的通信协议2. 编写客户端和服务器端的代码3. 运行客户端和服务器端,并进行通信测试4. 分析通信过程中的数据传输情况实验结果:经过实验,我们成功实现了一个简单的客户端和服务器端通信程序。
在测试过程中,我们发现数据可以正常地在客户端和服务器端之间传输,而且通信过程稳定可靠。
分析:通过本次实验,我们深入了解了Socket编程的基本原理和实现方式。
Socket编程可以灵活地实现不同计算机之间的通信,为网络通信提供了重要的技术支持。
在实际应用中,Socket编程可以用于实现各种网络通信功能,如网页浏览、文件传输、视频流等。
总结:通过本次实验,我们对Socket编程有了更深入的了解,并掌握了基本的编程技巧和调试方法。
Socket编程是网络通信中的重要技术,对于计算机网络领域的学习和应用具有重要的意义。
希望通过今后的实践和学习,我们能够进一步深化对Socket编程的理解,为网络通信技术的发展做出贡献。
通过本次实验,我们对Socket编程有了更深入的了解,并掌握了基本的编程技巧和调试方法。
Socket编程是网络通信中的重要技术,对于计算机网络领域的学习和应用具有重要的意义。
希望通过今后的实践和学习,我们能够进一步深化对Socket编程的理解,为网络通信技术的发展做出贡献。
西安邮电大学Socket网络编程
2015 年 4 月27 日一、实验目的①熟悉Socket网络编程②熟悉CS客户机模式③熟悉ServerSocket编写服务端④熟悉使用多线程机制处理业务⑤了解客户机之间通信方式二、实验内容及要求①采用CS模式,通过客户机向服务器端发送消息;②采用Socket来实现客户机之间的网络通信;③通过ServerSocket创建服务端来处理接受客户机请求;④通过多线程方式来处理客户机之间的通信请求;⑤实现通信的界面窗口;⑥实验内容有发送私聊消息、向选中用户发送文件、用户接受文件。
三、实验过程1.首先学习了在JAVA语言中TCP/IP协议下的Socket网络模式图如1.1所示图1.1TCP/IP协议下的Socket网络模式图由图1.1可以得到,Socket通信的步骤如下:(1)在服务器端创建一个ServerSocket对象并且指定端口号。
(2)运行ServerSocket的accept()方法,等候客户端的请求。
(3)客户端创建一个Socket对象,指定计算机的地址和端口号,向服务器端发出连接请求。
(4)服务器端接收到来自客户端的请求后,创建Socket对象与客户端建立连接。
(5)服务器端和客户端分别建立输入输出流进行数据传输。
(6)通信结束后,服务器端和客户端分别关闭相应的Socket连接。
(7)服务器端程序运行结束后,调用ServerSocket对象的close()方法停止等待客户端请求。
由此可以看出,对于一个网络通信程序来说,需要编写服务器端和客户端两个程序才能够实现相互通信,为了实现一个服务端程序能够对多个客户进行服务,需要使用到多线程,在服务器端创建客户请求的监听线程,一旦客户发起请求连接,在服务器端创建用于服务的Socket,利用改Socket完成与客户的通信,即每个线程针对一个客户进行服务,数据传输结束后,终止运行该Socket通信的线程,继续在服务器端指定的端口进行监听。
2.数据报的通信的发送和接收过程:应用程序的工作流程如下: (1)首先要建立数据报通信的Socket,我们可以通过创建一个DatagramSocket对象实现它,在Java中DatagramSocket类有如下两种构造方法: public DatagramSocket() 构造一个数据报socket,并使其与本地主机任一可用的端口连接。
计算机网络 Socket编程实验报告 华中科技大学 HUST
电子与信息工程系实验报告实验名称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都花了大量的时间和精力。
网络编程_实验报告
一、实验目的1. 理解网络编程的基本原理和概念。
2. 掌握TCP/IP协议的基本工作原理。
3. 学会使用Socket编程实现网络通信。
4. 增强实际操作能力,提高网络编程水平。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm4. 网络环境:校园局域网三、实验内容本次实验主要实现一个基于TCP协议的简单网络通信程序,包括客户端和服务器端。
1. 服务器端服务器端负责监听客户端的连接请求,接收客户端发送的数据,并回显给客户端。
```pythonimport socket# 创建socket对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 获取本地主机名host = socket.gethostname()port = 12345# 绑定端口server_socket.bind((host, port))# 设置最大连接数,超过后排队server_socket.listen(5)print("等待客户端连接...")while True:# 建立客户端连接client_socket, addr = server_socket.accept()print("连接地址:", addr)while True:# 接收客户端数据data = client_socket.recv(1024)if not data:break# 发送数据回客户端client_socket.send(data)# 关闭连接client_socket.close()```2. 客户端客户端负责向服务器端发送数据,并接收服务器端回显的数据。
```pythonimport socket# 创建socket对象client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 获取本地主机名host = socket.gethostname()port = 12345# 连接服务器client_socket.connect((host, port))# 发送数据client_socket.send("Hello, Server!")# 接收数据data = client_socket.recv(1024)print("从服务器接收到的数据:", data)# 关闭连接client_socket.close()```四、实验步骤1. 编写服务器端代码,并运行程序。
计算机网络socket编程实验报告
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编程一、实验目的通过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地址即可。
《网络编程》实验报告
一、实验目的1. 理解网络编程的基本原理和概念。
2. 掌握TCP/IP协议栈的基本工作原理。
3. 学习使用Socket编程实现网络通信。
4. 熟悉网络编程中的多线程编程技术。
5. 提高实际编程能力和问题解决能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 20194. 网络编程库:Winsock三、实验内容1. 网络编程基础2. Socket编程3. 多线程编程4. 客户端-服务器模式四、实验步骤1. 网络编程基础(1)了解网络编程的基本概念,如IP地址、端口号、协议等。
(2)学习TCP/IP协议栈的工作原理,包括OSI七层模型和TCP/IP四层模型。
2. Socket编程(1)学习Socket编程的基本原理,包括Socket创建、连接、发送、接收和关闭等操作。
(2)编写一个简单的TCP客户端程序,实现与服务器端的通信。
(3)编写一个简单的TCP服务器程序,接收客户端的连接请求,并实现数据交互。
3. 多线程编程(1)学习多线程编程的基本原理,了解线程、进程、并发和同步等概念。
(2)在客户端程序中添加多线程,实现同时与多个服务器进行通信。
(3)在服务器程序中添加多线程,实现同时处理多个客户端的连接请求。
4. 客户端-服务器模式(1)实现一个简单的文件传输客户端,实现文件的发送和接收。
(2)实现一个简单的文件传输服务器,接收客户端的文件传输请求,并完成文件传输。
五、实验结果与分析1. 网络编程基础通过学习网络编程基础,我们了解了网络编程的基本概念和TCP/IP协议栈的工作原理,为后续的Socket编程打下了基础。
2. Socket编程(1)通过编写TCP客户端程序,实现了与服务器端的通信,验证了Socket编程的基本原理。
(2)通过编写TCP服务器程序,接收客户端的连接请求,并实现了数据交互,进一步巩固了Socket编程的知识。
3. 多线程编程通过在客户端和服务器程序中添加多线程,实现了同时与多个服务器进行通信和同时处理多个客户端的连接请求,提高了程序的并发处理能力。
计算机网络socket编程实验报告
计算机网络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通信实验报告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编程
《网络编程》实验报告实验序号: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())); //把字节数组转换为字符串}}。
