Java实现一个简单的命令行聊天程序

Socket编程

Java实现

客户端

package net;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class TalkClient {

    public static void main(String[] args) {
        try
        {
            Socket socket = new Socket("127.0.0.1",4701); //127.0.0.1表示客户端的ip地址
            BufferedReader sin = new BufferedReader(new
                    InputStreamReader(System.in)); //读取键盘输入
            PrintWriter os = new PrintWriter(socket.getOutputStream()); //向服务器端输出
            BufferedReader is = new BufferedReader(new
                    InputStreamReader(socket.getInputStream())); //从服务器端接收输入流
            String readline;
            readline = sin.readLine(); //键盘首先输入一行
            while(!readline.equals("bye")) 
            {
                os.println(readline); //输出到服务器端
                os.flush();
                System.out.println("Client:"+readline); //打印客户端的信息
                System.out.println("Server:"+is.readLine()); //打印服务器端的回信
                readline = sin.readLine(); //继续接收键盘输入
            }
            os.close();
            is.close();
            socket.close();
        }
        catch(Exception e)
        {
            System.out.println("Error"+e);
        }
    }
}

服务器端

package net;
import java.io.*;
import java.net.*;
public class TalkServer {

    public static void main(String[] args) {
        try
        {
            ServerSocket server = null; //初始化一个ServerSocket对象
            try
            {
                server = new ServerSocket(4701); //建立端口号4701
            }
            catch(Exception e)
            {
                System.out.println("can not listen to:"+e);
            }
            Socket socket = null; //服务器的socket
            try
            {
                socket = server.accept(); 
                //服务器等待来自接收端的socket情况,然后返回一个socket对象,如果没有接收端请求连接,就一直运行
            }
            catch(Exception e)
            {
                System.out.println("Error:"+e);
            }
            //下面这些原理跟客户端实现一样
            String line;
            BufferedReader is = new BufferedReader(new
                    InputStreamReader(socket.getInputStream()));
            PrintWriter os = new PrintWriter(socket.getOutputStream());
            BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Client:"+is.readLine());
            line = sin.readLine();
            while(!line.equals("bye"))
            {
                os.println(line);
                os.flush();
                System.out.println("Server:"+line);
                System.out.println("Client:"+is.readLine());
                line = sin.readLine();
            }
            os.close();
            is.close();
            socket.close();
            server.close();
        }
        catch(Exception e) 
        {
            System.out.println("Error:"+e);
        }
    }
}

下面看一下如何用命令行来运行这两个程序

NQt3sP.png

基本步骤就是

  1. 到达这两个文件的根目录
  2. 使用javac xxx.java编译这两个文件生成对应的class文件
  3. 如果你是直接在一个文件夹下拷贝这两个文件,那直接使用命令java xxx(注意,这里没有后缀.class,但是运行的是class文件)
  4. 如果你是使用eclipse来保存这两个文件,这两个文件应该会被保存到src目录下,这时候你就要按图片上的来运行class文件(编译文件的话要到文件根目录),不然可能会报错,图片上的方式就是到达src目录下,java 下级目录.xxx 文件
  5. 注意,这只是一个简单的程序,只能够接收一条发送一条
  6. 要使用两个命令行窗口来运行
  7. 如果运行TalkServer.class文件报错,可能是端口号已经被使用了,可以换一个端口号,注意不要时要1~1024的端口号,其他的端口号随便用

参考:

,只能够接收一条发送一条
6. 要使用两个命令行窗口来运行
7. 如果运行TalkServer.class文件报错,可能是端口号已经被使用了,可以换一个端口号,注意不要时要1~1024的端口号,其他的端口号随便用

参考:

清华大学Java课程

猜你喜欢

转载自blog.csdn.net/jump_into_zehe/article/details/106869426