JAVA之TCP网络通讯

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
由IETF的RFC 793定义,在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。
基于TCP网络通讯实现的类主要有服务器端的ServerSocket用客户端的Socket。通讯流程:
打开服务器,等待客户端连接-->客户端连接上服务器-->数据通讯。
代码实现步骤:
  1. 创建服务器端(ServerSocket)对象或客户端(Socket)对象。
  2. 建立起服务器与客户端连接
  3. 通过输入输出流进行文件(数据)通讯
  4. 通讯结束 ,关闭资源 。
    一个简单的小例子,服务端:
public class SocketServer {

    public static void main(String[] args) {
        try {
            // 创建一个服务器ServerSocket,并指定端口号为5120
            ServerSocket mServerSocket = new ServerSocket(5120);
            // 等待客户端连接
            Socket socket = mServerSocket.accept();
            // 连接上客户端后,获取客户端输入流信息
            InputStream is = socket.getInputStream();
            // 通过获取缓冲数据方式来读取文本信息
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            // 获取文本信息
            String line;
            StringBuffer sb = new StringBuffer();
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
            System.out.println(sb.toString());
            socket.shutdownInput();
            // 收到客户端信息后,回复客户端信息
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);
            pw.write("收到回复,我是服务端");
            pw.flush();
            // 关闭流通常放在finally中操作
            os.close();
            br.close();
            is.close();
            pw.close();
            socket.close();
            mServerSocket.close();
        } catch (IOException e) {

            e.printStackTrace();
        }
    }

}

客户端:

public class ClientSocket {

    public static void main(String[] args) {
        try {
            // 创建客户端Socket,指定主机和端口
            Socket mSocket = new Socket("localhost", 5120);
            // 通过输入流向服务器发数据
            OutputStream os = mSocket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);
            pw.write("来自客户端Socket的数据,你收到了吗?");
            pw.flush();
            mSocket.shutdownOutput();
            // 收取服务端的回复信息
            InputStream is = mSocket.getInputStream();
            // 通过获取缓冲数据方式来读取文本信息
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            // 获取文本信息
            String line;
            StringBuffer sb = new StringBuffer();
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
            System.out.println(sb.toString());
            // 关闭流通常放在finally中操作
            br.close();
            is.close();
            pw.close();
            os.close();
            mSocket.close();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

运行时,要先启动服务端,然后启动客记户端,通常网络通讯会与多线程交织在一起。

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值