实验步骤
一、 服务器端
1.编写服务器端Server.java的代码(注:127.0.0.1是回送地址,指本地机,用来测试使用)
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
tring [] answer = {"South Africa","In the world cup","haha fun"};
ServerSocket serverForClient = null;
Socket socketOnServer = null;
DataOutputStream out = null;
DataInputStream in = null;
System.out.println("ready");
try {
serverForClient = new ServerSocket(20100);
System.out.println("new ServerSocket successful");
}
catch(IOException e1) {
System.out.println(e1);
e1.printStackTrace();
}
try{ System.out.println("wait call");
System.out.println("blocked");
socketOnServer = serverForClient.accept();
System.out.println("accept successful");
out = new DataOutputStream(socketOnServer.getOutputStream());
in = new DataInputStream(socketOnServer.getInputStream());
System.out.println("output");
for(int i = 0;i<answer.length;i++) {
String s = in.readUTF();
System.out.println("Server receive response" + s);
out.writeUTF(answer[i]);
Thread.sleep(500);
}
}
catch(Exception e) {
System.out.println("client break" + e);
e.printStackTrace();
}
System.out.println("getout");
}
}
3.编译Server.java文件(1、javac Server.java 2、java Server)
4.运行服务器程序
- Linux部分
5.先ps -ef检查进程
6.netstat -nlp查看端口
- cmd部分
5.先.\tasklist检查进程
6…\netstat -ano查看端口
7.查看服务端程序打印的结果
二、客户端
1.编写客户端Client.java代码
import java.io.*;
import java.net.*; public class Client {
public static void main(String args[]) {
String mess[] ={"2010世界杯在哪举行?","巴西进入世界杯了码?","中国进入世界杯了码?"};
Socket mysocket;
DataInputStream in=null;
DataOutputStream out=null;
try{
mysocket=new Socket("127.0.0.1",20100);
in=new DataInputStream(mysocket.getInputStream());
out=new DataOutputStream(mysocket.getOutputStream());
for(int i=0;i<mess.length;i++) {
out.writeUTF(mess[i]);
// in读取信息,堵塞状态
String s=in.readUTF();
System.out.println("客户收到服务器的回答:"+s);
Thread.sleep(500);
}
}
catch(Exception e) {
System.out.println("服务器已断开"+e);
}
}
}
2.编译Client.java文件(1、javac Client.java 2、java Client)
3.查看客户端连接的ip和端口是否正确
实验结果
在阿里云服务器上启动服务端的程序;在 pc 上启动客户端的程序,建立连接
1.首先更改Client.java文件里的代码将IP地址改为服务端的IP地址
2.然后在服务器上编译Server.java
3.用netstat命令查看一下连接情况
4.在cmd上编译Client.java
5.用netstat命令查看一下连接情况
结果:
错误分析
一、问题一
- connection refused 错误原因:IP地址或端口号不正确
- 解决办法:更改为正确的IP地址和端口号
(注:IP地址是用来识别网络与主机的地址;
访问本机服务器IP地址的方法:1、127.0.0.1 2、真实IP地址 3、域名)
二、问题二
- 问题:代码更新以后还是打印出来之前代码打印的结果
1.检查重新修改代码内容
2.检查.class文件的时间
3.将之前存在的.class文件删除,等待重新编译
三、问题三
杀完端口为“20100”的进程后用netstat -nlp查看端口“20100”仍然存在
杀进程命令:
1.netstat -anp|grep “20100”
2.看到进程号为5326,于是kill -9 5326
杀进程时,要重复检查一遍是否杀成功,通过netstat -nlp检查
四、问题四
- 问题:想在服务器上面编译Server.java,使其编译出Server.class文件
- 解决办法:需两个Server.java文件保存时间不一样,说明在服务器上的Server文件是之前的,所以我们如果要在服务器上编译修改后的新代码需要通过filezilla重新在服务器上传一遍,否则服务器无法编译新修改的代码
所以1.在服务器上修改新的Server.java文件
2.在服务器上编译新的Server.java文件
3.最后将新修改的Server.java文件编译出来