网路编程实验报告Word格式文档下载.docx

上传人:b****8 文档编号:22675195 上传时间:2023-02-05 格式:DOCX 页数:20 大小:52.62KB
下载 相关 举报
网路编程实验报告Word格式文档下载.docx_第1页
第1页 / 共20页
网路编程实验报告Word格式文档下载.docx_第2页
第2页 / 共20页
网路编程实验报告Word格式文档下载.docx_第3页
第3页 / 共20页
网路编程实验报告Word格式文档下载.docx_第4页
第4页 / 共20页
网路编程实验报告Word格式文档下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

网路编程实验报告Word格式文档下载.docx

《网路编程实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《网路编程实验报告Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。

网路编程实验报告Word格式文档下载.docx

基于client/server模型通讯的基本原理,在服务器端来监听服务的请求,当客户端向该地址提出连接请求时,服务器端会对他的请求做出相应的反应。

程序源代码:

服务器端:

packagecs;

importjava.awt.BorderLayout;

importjava.awt.Container;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.io.ObjectInputStream;

importjava.io.ObjectOutputStream;

import.ServerSocket;

import.Socket;

importjavax.swing.JFrame;

importjavax.swing.JScrollPane;

importjavax.swing.JTextArea;

importjavax.swing.JTextField;

publicclassServerextendsJFrame{

privateObjectInputStreammInput;

//输入流

privateObjectOutputStreammOutput;

//输出流

privateJTextFieldmEnter;

//输入区域

privateJTextAreamDisplay;

//输出区域

privateintmClientNumber=0;

//连接的客户端数

//在图形界面中添加组件

publicServer(){

super("

美国情报局"

);

Containerc=getContentPane();

mEnter=newJTextField();

mEnter.setEnabled(false);

mEnter.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevent){

//向客户端发送数据

try{

Strings=event.getActionCommand();

mOutput.writeObject(s);

mOutput.flush();

mbDisplayAppend("

服务器端:

"

+s);

mEnter.setText("

//清除输入区域的原有内容

}catch(Exceptione){

e.printStackTrace();

}

}

});

(写不完时,可另加附页。

c.add(mEnter,BorderLayout.NORTH);

mDisplay=newJTextArea();

c.add(newJScrollPane(mDisplay),BorderLayout.CENTER);

}

protectedvoidmbDisplayAppend(Strings){

mDisplay.append(s+"

\n"

mDisplay.setCaretPosition(mDisplay.getText().length());

mEnter.requestFocusInWindow();

//转移输入焦点到输入区域

publicbooleanmbIsEndSession(Stringm){

if(m.equalsIgnoreCase("

q"

))

return(true);

quit"

exit"

end"

结束"

return(false);

publicvoidmbRun(){

try{

ServerSocketserver=newServerSocket(5001);

Stringm;

//来自客户端的消息

while(true){

mClientNumber++;

mbDisplayAppend("

等待连接["

+mClientNumber+"

]"

Sockets=server.accept();

接收到客户端连接["

mOutput=newObjectOutputStream(s.getOutputStream());

mInput=newObjectInputStream(s.getInputStream());

mOutput.writeObject("

连接成功"

mOutput.flush();

mEnter.setEnabled(true);

//若没有退出命令则接字符串;

do{

//客户端发来的信息字符串形式

m=(String)mInput.readObject();

"

+m);

}while(!

mbIsEndSession(m));

//do-while循环结束

mOutput.writeObject("

//通知客户端退出程序

mEnter.setEnabled(false);

mOutput.close();

mInput.close();

s.close();

连接["

]结束"

}catch(Exceptione){

e.printStackTrace();

}

publicstaticvoidmain(String[]args){

Serverapp=newServer();

//配置

app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

app.setSize(350,150);

app.setVisible(true);

app.mbRun();

}

客户端:

publicclassClientextendsJFrame{

//客户端部分

publicClient(){

中共党中央"

//向服务端发送数据

try{

客户端:

//TODOAuto-generatedcatchblock

//将转移焦点到输入区域

publicvoidmbRun(Stringhost,intport){

mbDisplayAppend("

尝试连接"

Sockets=newSocket(host,port);

//来自服务器端的消息

mOutput=newObjectOutputStream(s.getOutputStream());

mInput=newObjectInputStream(s.getInputStream());

mEnter.setEnabled(true);

do{

m=(String)mInput.readObject();

}while(!

mOutput.writeObject("

mOutput.flush();

mOutput.close();

mInput.close();

s.close();

System.exit(0);

}catch(Exceptione){

//TODOAuto-generatedcatchblock

Clientapp=newClient();

if(args.length==0)

app.mbRun("

localhost"

5001);

else

app.mbRun(args[0],5001);

通过简单的服务器端和客户端的实验程序,切身体会到了两端的通信过程。

掌握了C/S模式下通信的基本原理。

教师签名:

年月日

实验二:

多线程的网络通信编程

学习并实践使用多线程库Pthread进一步优化网络通信的编程模式。

使用多线程,能够让多个客户端与服务器进行连接,使得建立连接的两个socket在一个单独的线程上对话。

服务端线程:

package多多;

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.InputStreamReader;

importjava.io.OutputStream;

importjava.io.PrintWriter;

publicclassServerthreadextendsThread{

//和本进程相关的socket

Socketsocket=null;

publicServerthread(Socketsocket){

this.socket=socket;

//线程执行的操作,响应客户端的请求

publicvoidrun(){

InputStreamis=null;

InputStreamReaderisr=null;

BufferedReaderbr=null;

OutputStreamos=null;

PrintWriterpw=null;

try{

//读取

//连接建立后,通过输入流来读取客户端发送的请求信息

is=socket.getInputStream();

isr=newInputStreamReader(is);

br=newBufferedReader(isr);

Stringinfo=null;

while((info=br.readLine())!

=null)

System.out.println("

+info);

socket.shutdownInput();

//写入

os=socket.getOutputStream();

pw=newPrintWriter(os);

Stringstr="

我是服务器端艳艳"

;

//Scannerreader=newScanner("

System.in"

//Stringstr=reader.nextLine();

//System.out.println("

请输出发送给客户端的消息:

pw.write(str);

pw.flush();

socket.shutdownOutput();

}catch(IOExceptione){

}finally{

//关闭资源

try{

if(is!

=null)

is.close();

if(isr!

isr.close();

if(br!

br.close();

if(os!

os.close();

if(pw!

pw.close();

}catch(Exceptione){

//TODO:

handleexception

e.printStackTrace();

TCP服务端:

publicclassTcpserver{

publicstaticvoidmain(String[]args)throwsIOException{

ServerSocketserverSocket=newServerSocket(8888);

Socketsocket=null;

intcount=0;

System.out.print("

...服务器端已开启服务...\n"

//循环监听等待客户端的连接

while(true){

socket=serverSocket.accept();

ServerthreadserverThread=newServerthread(socket);

//启动线程

serverThread.start();

count++;

客户端的数量:

+count);

//serverSocket.close();

//不可达

TCP客户端:

import.UnknownHostException;

importjava.util.Scanner;

publicclassTcpclient{

//@SuppressWarnings("

resource"

publicstaticvoidmain(String[]args)throwsUnknownHostException,IOException{

Socketsocket=newSocket("

127.0.0.1"

8888);

System.out.println("

*客户端已就绪*"

OutputStreamos=socket.getOutputStream();

PrintWriterpw=newPrintWriter(os);

我是客户端科比-布莱恩特"

请输出发送给服务器端的消息:

InputStreamis=socket.getInputStream();

InputStreamReaderisr=newInputStreamReader(is);

BufferedReaderbr=newBufferedReader(isr);

服务器端说:

//关闭资源

is.close();

isr.close();

br.close();

os.close();

pw.close();

socket.close();

当server每接收到一个client连接请求时,都把处理流程放到一个独立的线程里去运行,然后等待下一个client连接请求时,这样就不会阻塞server端接收请求了。

每个独立运行的程序在使用完socket对象之后要将其关闭。

实验三:

网络爬虫的应用

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1