TCP网络通信编程笔记

TCP网络通信编程笔记

  • 应用案例(使用字节方式)

  1. 编写一个服务端,和一个客户端
  2. 服务端在9999端口监听
  3. 客户端连接服务端,发送"hello,server",并接收服务端发回的’hello,client’,再退出
  4. 服务端接收到客户端发送的信息,输出,并发送"hello,client"再 退出

示意图:

在这里插入图片描述
在这里插入图片描述

客户端编程思路:

  1. 连接服务端(ip,端口),连接成功返回Socket对象
  2. 连接上后,通过socket.getOUtputStream()得到与socket对象关联的输出流对象
  3. 通过输出流,写入数据到数据通道,再写入结束的标志
  4. 通过socket对象.getInputStream() 读取客户端 写入数据通道显示
  5. 关闭流对象和socket,必须关闭

服务端编程思路:

  1. 在本机的9999端口监听,等待连接 细节 :要求本机的9999端口没有其它服务在监听

  2. 有客户端连接,则会返回Socket对象,程序继续进行

  3. 通过socket对象.getInputStream() 读取客户端 写入数据通道显示

  4. Io读取

  5. socket.getOutputStream()得到与socket对象关联的输出流对象

  6. 通过输出流,写入数据到数据通道,再写入结束的标志socket。shutdownOutput()

  7. 关闭流和socket

    客户端代码实现

    //编写客户端
    public class Client{
        public static void main(String[] args)throws IOException{
            //给服务端发送数据
            // 1.连接服务端(IP,端口),连接成功返回一个Socket对象
            Socket socket=new Socket(InetAddress.getLocalhost(),9999);
            //2.连接上后,通过socket.getOutputStream()得到与socket对象关联的输流对象
            OutputStream outputStream=socket.getOutputStream();
            //3.通过输出流,写入数据到数据通道,再写入结束的标记
            outputStream.write("hello Serve".getBytes());
            // 输出数据结束的标志
            outputStream.shutdownOutput();
            
            //接收服务端回复的数据
            //4.获取和socket关联的的输入流,读取数据(字节),并显示
            InputStream inpuStream=socket.getInPutStream();
            byte[] bytes=new byte[1024];
            int readLen=0;
            //io读取(使用字节的方式)
            while((readLen=inputStream.read(bytes))!=-1){
                System.out.println(new String(bytes,0,reaLen));//根据读取到实际长度显示内容
            }
            //关闭流和socket对象
           inputStream.close();
           outputStream.close();
           socket.close();
        }
    }
    

    服务端代码实现

    // 编写服务端
    public class Service{
        public static void main(String [] args) throws IOException{
            //接收客户端数据
            // 1.在本机的9999端口监听,等待连接
            // 细节:这个ServerSocket可以通过accept()返回多个Socket[多个客户端连接服务器的并发]
            SerVerSocket serverSocket=new ServerSocket(9999);
            // 2.有客户端连接,则会返回Socket对象,程序继续进行,否则继续等待
            Socket socket=serverSocket.accept();
            // 3.通过socket对象.getInputStream() 读取客户端 写入数据通道显示
            InputStream inputStream=socket.getInputStream();
            //io读取
            btye[] bytes=new byte[1024];
            int reaLen=0;
            while((reaLen=inputStrem.read(bytes))!=-1){
               System.out.println(new String(bytes,0,readLen)); 
            }
            // 回复客户端数据
            //1. 获取socket相关的输出流 socket.getOUtputStream()得到与socket对象关联的输出流对象
            OutputStream outputStream=socket.getOutputStream();
            outputStream.wrtie("hello,Cilent".getBytes());
            outputStream.shutdownOutput();
            //关闭流和socket
            outputStream.close();
            inputStream.close();
            socket,close();
        }
    }
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值