ServerSocket对象与服务器端套接字实验步骤与结果、错误分析

实验步骤

一、 服务器端

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文件编译出来
发布了36 篇原创文章 · 获赞 0 · 访问量 843

猜你喜欢

转载自blog.csdn.net/Z1998hx0919/article/details/105279766