2.编程环境Windows(MS Visual系列,VC/VB/VS.Net;)和Linux(编辑器vi+编译器GCC)均可;
三、实验原理
1、建立客户端/服务器连接模式
所有的客户端必须连接到服务器。客户端的通信由服务器转发。A 发信息 给B = A->服务器->B。
用IP地址定位网上的计算机,一共4段,每段0-255之间,编写程序,通过Java来获取本机IP地址(本机IP地址也可以用:127.0.0.1表示,本机名称可以用:localhost来表示),通过java.net.InetAddress类来实现。
用端口(port)来对应着应用程序。确定了IP地址,还要确定对方的
程序是在哪个端口,我们才能与之通信,端口就是一个数字,0-65535之间。
用多线程监听的方式来完成服务器和客户端的交互,主要用到ServerSocket()函数。
用输入输出流BufferedReader() PrintStream()来发送消息。 2、通信传输
1) 服务器上的软件应该运行 开辟一个端口,等待客户连接 java.net.ServerSocket
2) 客户通过服务器的IP和开的端口连上服务器
java.net.Socket(既能连接又能通信) 将本机当成服务器,在本机上另外编一个程序当成客户端,服务器界面运行,等待客户连接; 客户界面上一个按钮,点击,连接服务器,当连上之后,客户标题变为“OK”,服务器标题变为“有人连上”。 3、数据流
socket是通信的纽带,socket里面有一个输入流InputStream一个输出流OutputStream,如果向输出流里面输出内容,另一方就会得到,并通过输入流读取getInputStream():得到套接字的输入数据流。getOutputStream():得到套接字的输出数据流。
工作完毕,使用流对象的close()方法关闭用于网络通信的输入、输出流,用Socket对象的close()方法关闭socket。
四、实验结果
服务器端
登陆客户端
客户端之间的交互
五、源代码
//服务器端
import javax.swing.*; import java.net.*; import java.io.*; import java.util.*;
class Server extends JFrame implements Runnable{
private ArrayList persons = new ArrayList(); private ServerSocket ss = null; public Server() { }
public void run(){
while(true){
try{
Socket s = ss.accept();
this.setSize(200,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle(\服务器\ this.setVisible(true); try{
ss = new ServerSocket(1201);
new Thread(this).start();//启动等待连接的线程
}catch(Exception ex){}
ReceiveThread rt = new ReceiveThread(s);
}
}
persons.add(rt); rt.start();
}catch(Exception ex){}
class ReceiveThread extends Thread{
private BufferedReader br = null; private PrintStream ps = null;
public ReceiveThread(Socket s) throws Exception{
br = new BufferedReader(new InputStreamReader(s.getInputStream()));//
发送数据构造函数
}
public void run(){
while(true){//接受信息 }
try{String msg = br.readLine();//死等函数 //传给所有的客户端
for(int i=0;i }catch(Exception ex){} ReceiveThread rt = (ReceiveThread)persons.get(i); rt.ps.println(msg); ps = new PrintStream(s.getOutputStream());//用于发送数据 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库计算机网络实验报告(3)在线全文阅读。
相关推荐: