java网络编程——Socket和ServerSocket,套接字编程——简单聊天室

来源:互联网 发布:中世纪2优化9挪威 编辑:程序博客网 时间:2024/05/17 01:41

一。客户端:Client.java

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.InetAddress;import java.net.Socket;import java.net.SocketException;import java.net.UnknownHostException;public class Client {    public static void main(String[] args) throws SocketException {        String readline = null;        BufferedReader standard_in = null;  //用于标准输入,从键盘输入数据        BufferedReader socket_in = null;    //套接字输入流,用来接受服务器发送过来的数字        PrintWriter socket_out = null;      //套接字输出流,将“标准输入流”中的数据写到socket输出流,用来向服务器发送数据        try{            Socket socket = new Socket("127.0.0.1", 4700);//4700是随便起的端口号            try{                standard_in = new BufferedReader(new InputStreamReader(System.in));                socket_in = new BufferedReader(new InputStreamReader(socket.getInputStream()));                socket_out = new PrintWriter(socket.getOutputStream());                readline = standard_in.readLine();                while(!readline.equalsIgnoreCase("bye")){                    socket_out.println(readline);                    socket_out.flush();                    System.out.println("Client send data:\t"+readline);                    System.out.println("Client accept data:\t"+socket_in.readLine());                    readline = standard_in.readLine();                }            }catch(IOException E){                E.printStackTrace();            }            //close resource            standard_in.close();            socket_in.close();            socket_out.close();                                                                                                                                                                                                                                socket.close();        }catch(UnknownHostException e){            e.printStackTrace();        } catch(IOException e){            e.printStackTrace();        }    }}

二。服务器端 Server.java

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class Server {    public static void main(String[] args) {        ServerSocket serverSocket = null;        Socket socket = null;        BufferedReader in = null;        BufferedReader sin = null;        PrintWriter out = null;        String line = "";        try{            serverSocket = new ServerSocket(4700);        }catch(IOException e){            e.printStackTrace();        }        try{            socket = serverSocket.accept();        }catch(IOException E){            System.out.println("can't connect the server");            E.printStackTrace();        }        try {            sin = new BufferedReader(new InputStreamReader(System.in));            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));            out = new PrintWriter(socket.getOutputStream());            //            System.out.println("the server accept data:\t"+in.readLine());            line = sin.readLine();            while(!line.equalsIgnoreCase("bye")){                out.println(line);                out.flush();                System.out.println("server send data:\t"+line);                System.out.println("server accept date:\t"+in.readLine());                  line = sin.readLine();            }        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

三。测试

  • 客户端
    这里写图片描述
  • 服务器端
    这里写图片描述
  • 具体操作:客户端发送一条数据,服务器端就接受数据。同理,服务器端发送一条数据,客户端就接收数据。但是,这个只能客户端发送一次后必须切换让服务器发送数据,还不能连续发送多条数据。

    0 0
    原创粉丝点击