命令行聊天小程序

2019-10-18  本文已影响0人  勇者与王者

分为客户端和服务端,
客户端:

package chat;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

/**
* 
* @author qz:
* @version 创建时间:2019年10月16日 上午10:20:59
* 
*/
public class ChatClient {

    public static void main(String[] args) throws UnknownHostException, IOException {
        // TODO Auto-generated method stub

        String serverIp = "172.19.0.18";
        Socket socket = new Socket(serverIp,2345);
        
        byte[] bytes = new byte[1024];
        
        int len = 0;
        
        InputStream in = socket.getInputStream();
        
        //获取客户端的输出流 即上传到服务器的流
        OutputStream out = socket.getOutputStream();
        String file = "D:\\javaApp\\record.txt";
                
//      FileInputStream fis = new FileInputStream(file);
                
        FileOutputStream fos = new FileOutputStream(new File(file));
        
        //接收服务器的 连接建立的输出信息:
        len = in.read(bytes);
        //将消息写入本地文件
        fos.write(bytes);
        System.out.println(new String(bytes,0,len));
        
        String name = "Jack";
        
        
        // 给服务器发送提示信息:
        byte[] message = "Please enter your name:".getBytes();
        out.write(message,0,message.length);
        
        
        len = in.read(bytes);
        String serverName = new String(bytes,0,len);
        System.out.println("Your name :"+serverName);
        
        
        
        len = in.read(bytes);
        fos.write(bytes);
        System.out.println(serverName+":"+new String(bytes,0,len));
        
        
        //向服务器发送名字
        System.out.println(name+":"+name);
        out.write(name.getBytes());
        
        Scanner input = new Scanner(System.in);
        
        String send="";
        while ( !send.equals("exit") ) {
            
            System.out.print(name+": ");
            send = input.nextLine();
            out.write(send.getBytes(),0,send.getBytes().length);
            
            len = in.read(bytes);
            fos.write(bytes,0,len);
            System.out.println(serverName+":"+new String(bytes,0,len));
            
            
            
            
            
        }
        
        // 调用socket的 shutdownOutput()方法 发送终止序列
        socket.shutdownOutput();
        
        //获取客户的输入流,即 服务器返回的消息
        
        len = in.read(bytes);
        
        System.out.println(new String(bytes,0,len));
        
        fos.close();
        socket.close();
        
    }

}

服务端:

package chat;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

/**
* 
* @author qz:
* @version 创建时间:2019年10月16日 下午2:21:18
* 
*/
public class ChatServer {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        ServerSocket server = new ServerSocket(2345);
        Socket socket = server.accept();
        
        //获取客户端 的输出流 即向服务器写数据
        OutputStream out = socket.getOutputStream();
        out.write("Connection Established successfully!".getBytes());
        
        
        String path = "/home/qz/socket";
        
        File f = new File(path);
        
        if ( !f.exists()) {
            f.mkdirs();
        }
        
        FileOutputStream fos = new FileOutputStream(new File("record.txt"));
        
        //获取客户端的输入流 即 服务器的输出流
        InputStream in = socket.getInputStream();
        byte [] bytes = new byte[1024];
        int len = 0;
        
        
        //获取客户端的消息:
        len = in.read(bytes);
        fos.write(bytes);
        System.out.println(new String (bytes,0,len));
        
        String serverName = "Host";
        //将服务器名字发送给客户端
        System.out.println(serverName+":"+serverName);
        out.write(serverName.getBytes());
        
        
        
        //获取客户端姓名
        out.write("and your name?".getBytes());
        
        len = in.read(bytes);
        fos.write(bytes);
        
        String customerName = new String(bytes,0,len);
        System.out.println("from customer:"+customerName);
        
        
        
        Scanner input = new Scanner(System.in);
        
        while (  (len = in.read(bytes) )!= -1 ) {
            
            
            fos.write(bytes,0,len);
            System.out.println(customerName+":"+new String(bytes,0,len));
            
            
            System.out.print(serverName+":");
            String response = input.nextLine();
            fos.write( (serverName+":"+response).getBytes());
            out.write(response.getBytes(),0,response.getBytes().length);
            
            
            
            
        }
        
        //写往客户端 输出流
        out.write("Connection shutdown!".getBytes());
        
        fos.close();
        socket.close();
        
        
        
    }

}

上一篇下一篇

猜你喜欢

热点阅读