Java 基于TCP/IP 实现简单的 socket 通信

Server.java

package com.learn;

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

/**
 * 基于TCP协议的Socket通信,实现用户登录 服务端
 *
 */

public class Server {
    public static void main(String[] args) {

        try {
            // 1.创建一个服务器端的 Socket,即 ServerSocket,指定绑定的端,并监听
            ServerSocket server = new ServerSocket(8888);
            // 2.调用 accept 方法开始监听,等待客户端连接
            System.out.println("****服务器开始启动,等待客户端上线****");
            Socket socket = server.accept();
            // 3.获取一个输入流,用来读取客户端所发送的登录信息
            InputStream is = socket.getInputStream();// 字节输入流
            InputStreamReader isr = new InputStreamReader(is);// 将字节流转为
            BufferedReader br = new BufferedReader(isr);// 为输入流添加缓冲

            String info = null;
            while ((info = br.readLine()) != null) {
                System.out.println("我是服务器,客户端说" + info);
            }
            socket.shutdownInput();// 关闭输入流

            // 4.获取输出流
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);// 包装打印流
            pw.write("好的,我收到消息了,你可以出去玩了");
            pw.flush();
            socket.shutdownOutput();

            // 5.关闭资源
            pw.close();
            br.close();
            isr.close();
            is.close();
            server.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

Client.java

package com.learn;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/*
 * 客户端
 * */

public class Client {
    public static void main(String[] args) {

        try {
            // 1.创建 socket 指定服务器地址和端
            Socket client = new Socket("192.168.6.184", 8888);
            // 2.客户端向服务器发送登录信息
            OutputStream os = client.getOutputStream();// 字节输出流
            PrintWriter pw = new PrintWriter(os);
            pw.write("用户名: admin;密码:123");
            pw.flush();
            client.shutdownOutput();// 关闭输出流

            // 3. 获取输入流
            InputStream is = client.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String info = null;
            while ((info = br.readLine()) != null) {
                System.out.println("服务器发来消息说:" + info);
            }

            // 3.关闭其他资源
            pw.close();
            os.close();
            client.close();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

运行时,仍然需要先来运行服务端,然后再运行客户端即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值