2021-04-22 Socket通信简单代码

Socket通讯

服务器:

package day2.socket;
/*
聊天室的服务端
 */

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    /**
     * 运行在服务端的java.net.ServerSocket主要有两个工作:
     * 1:向系统申请服务端口,客户端就是通过这个端口与服务器建立连接的
     * 2:监听该服务器端口,一旦一个客户端连接就会自动创建一个Socket
     * 相当于"接起一个电话".通过这个Socket与客户端交互
     *
     * 我们吧Socket想成一个电话,而ServerSocket则是总机.
     */
    private ServerSocket server;
    public Server()  {
     try {
         /**
          * 实例化ServerSock的同时需要指定服务器端口,如果该端口已经被系统其他程序占用时抛出异常
          * java.net.BindException:Address already in use
           */
         System.out.println("正在启动服务器");
        server = new ServerSocket(8888);
         System.out.println("服务器已经启动完成!");
    }catch (IOException e){
        e.printStackTrace();
    }
    }


    public void start(){
        try {
            /**
             * ServerSocket提供的方法:
             * Socket accept()
             * 这个方法是阻塞方法,调用后就“卡住了”直到一个客户端连接
             * 该方法会立即返回一个Socket,通过这个Socket就可以和刚
             * 建立连接的客户交互
             */
            while (true){
                System.out.println("等待客户端连接...");
                Socket socket = server.accept();
                System.out.println("一个客户端连接了!");


            InputStream in =socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(in,"utf-8");
            BufferedReader br = new BufferedReader(isr);

            String line;
            while ((line = br.readLine())!=null){
                System.out.println("客户端说:"+line);
            }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        Server server =new Server();
        server.start();
    }
}
 

 

 

 

 

客户端:

package day2.socket;
/*
聊天室的客户端
 */

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    /**
     * java.net.socket 套接字
     * Socket封装了TCP协议的通讯细节,使用它可以和远端计算机建立连接
     * 并利用两个流的读写完成与远端计算机的数据交互
     */
    private Socket socket;
    /*
    构造方法,用于初始化客户端
     */
    public  Client()  {
        try{
            /**
             * 实例化Socket时需要两个参数:
             * 参数1:服务器IP地址信息,"localhost"是一种特殊的写法
             * 表示本机地址
             * 参数2:服务器打开的端口,数字取值范围1-65535之间
             *
             * 通过Ip我们可以找到网络上的服务器端所在计算机,通过端口可以连接到该计算机上的服务端应用程序
             */
            System.out.println("正在连接服务端...");
            socket = new Socket("192.168.43.60",8080);//建议用8000以后的号;localhost是自己连接自己
            System.out.println("与服务器建立连接!");
        }catch (IOException e){
            e.printStackTrace();
        }

    }
    /**
     * 客户端开始工作的方法
     *
     */
    public void start(){
        try {
            /**
             * Socket提供的方法:
             * OutputStream getOutputStream()
             * 该方法会返回一个字节输出流,通过这个输出流写出的字节会发送给远端计算机
             */
            OutputStream out = socket.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(out,"UTF-8");
            BufferedWriter bw = new BufferedWriter(osw);
            PrintWriter pw =new PrintWriter(bw,true);
//            pw.println("你好服务器!");

            Scanner scanner =new Scanner(System.in);
            while (true){
                String line = scanner.nextLine();
                if ("exit".equals(line)){
                    break;
                }
                pw.println(line);
            }


        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
    public static void main(String[] args) {
        Client client = new Client();
        client.start();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值