基于tcp的套接字通讯

//服务器编程
public class Server {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        try {
            ServerSocket ss = new ServerSocket(10000);
            System.out.println("服务器启动");
            while (true) {
                Socket server = ss.accept();
                System.out.println("连接客户端");
                new Thread(new Server_sendMessage(server)).start();
                new Thread(new Server_recieveMessage(server)).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
class Server_sendMessage implements Runnable{
private Socket socket;

    public Server_sendMessage() {
    }
    public Server_sendMessage(Socket socket) {
        this.socket = socket;
    }
    @Override
    public void run() {
        Scanner sc = new Scanner(System.in);
        OutputStream os = null;
        try {
            os = socket.getOutputStream();
            String line = null;
            while ((line = sc.nextLine()) != null && !"".equals(line)) {
                if ("quit".equals(line)) {
                    System.out.println("服务器正在断开连接....");
                    break;
                } else {
                    line="服务器>"+line;
                    os.write(line.getBytes());

                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
class Server_recieveMessage implements Runnable{
    private Socket socket;

    public Server_recieveMessage() {
    }
    public Server_recieveMessage(Socket socket) {
        this.socket = socket;
    }
    @Override
    public void run() {
        InputStream is = null;
        try {
            is = socket.getInputStream();
            byte[] buffer=new byte[1024];
            int len=0;
            while ((len = is.read(buffer)) != -1) {
                System.out.println(new String(buffer,0,len));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

//客户端编程

public class Client {
    public static void main(String[] args) {
        try {
            Socket client = new Socket(InetAddress.getLocalHost(),10000);
            System.out.println("连接服务器成功");
            new Thread(new Client_sendMessage(client)).start();
            new Thread(new Server_recieveMessage(client)).start();

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

    }
}
class Client_sendMessage implements Runnable{
    private Socket socket;

    public Client_sendMessage() {
    }
    public Client_sendMessage(Socket socket) {
        this.socket = socket;
    }
    @Override
    public void run() {
        Scanner sc = new Scanner(System.in);
        OutputStream os = null;
        try {
            os = socket.getOutputStream();
            String line = null;
            while ((line = sc.nextLine()) != null && !"".equals(line)) {
                if ("quit".equals(line)) {
                    System.out.println("客户端正在断开连接....");
                    break;
                } else {
                    line="客户端>"+line;
                    os.write(line.getBytes());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
class Client_recieveMessage implements Runnable{
    private Socket socket;

    public Client_recieveMessage() {
    }
    public Client_recieveMessage(Socket socket) {
        this.socket = socket;
    }
    @Override
    public void run() {
        InputStream is = null;
        try {
            is = socket.getInputStream();
            byte[] buffer=new byte[1024];
            int len=0;
            while ((len = is.read(buffer)) != -1) {
                System.out.println(new String(buffer,0,len));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

备注:客户端还缺少一个心跳监测线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值