Java Socket 网络编程(双方交互版)

 
  
  • IP用于找到网络上的计算机,端口则用于连接该机器上的服务端程序
  • Socket封装了TCP协议的通讯细节,使用Socket可以与服务端建立TCP连接,并基于流的读写操作完成双向通信
  • ServerSocket是运行在服务端的,负责打开服务端口,一旦有客户端与之连接就返回Scoket实例,通过该实例与客户端交互
public class TalkServer {
    private ServerSocket server;
    public TalkServer() throws IOException {
        server = new ServerSocket(8888);
        System.out.println("服务端已启动!");
    }
    public void talk(){
        try {
            Socket socket = server.accept();//接受客户端连接并分配socket对象
            System.out.println("客户端已连接!");
            BufferedReader reader =//一次读一行数据
            new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String str = null;
            while (true) {
                str = reader.readLine();
                if ("break".equals(str))break;//直到客户端输入break时结束
                System.out.println("客户端:" + str);}
            PrintWriter writer = new PrintWriter(socket.getOutputStream());
            writer.println("服务端已接收!");//向客户端发送数据
            writer.flush();
            reader.close();
            writer.close();
            socket.close();
        }catch (IOException e){e.printStackTrace();
        }
    }
    public static void main(String[] args) throws IOException {
        TalkServer server = new TalkServer();
        server.talk();
    }
}
public class TalkClient {
    private Socket socket;
    public TalkClient() {
        try {
            socket = new Socket("127.0.0.1", 8888);
            System.out.println("客户端已连接!");
        }catch (IOException e){
            e.printStackTrace();
            throw new RuntimeException("客户端连接失败!");
        }
    }
    public void talk() {
        try {
            PrintWriter pw = new PrintWriter(socket.getOutputStream());
            Scanner sc = new Scanner(System.in);
            while (true){//不断从控制台输入数据到服务端
                String str = sc.nextLine();
                pw.println(str);
                pw.flush();
                if ("break".equals(str))break;
            }
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String strc = reader.readLine();
            System.out.println("服务端:" + strc);
            pw.close();
            reader.close();
            socket.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        TalkClient client = new TalkClient();
        client.talk();
    }
}

你可能感兴趣的:(java,网络,开发语言)