0
点赞
收藏
分享

微信扫一扫

TCP网络编程 [Java]

刘员外__ 2022-01-09 阅读 64

TCP网络编程

这里我们通过一个例题来理解TCP网络编程

eg: 客户端发送信息给服务端,服务端将数据显示在控制台上

  • 首先我们先给出服务器端
package 网络编程.TCP网络编程;

import java.net.ServerSocket;
import java.io.InputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException{
        /*
        创建ServerSocket对象,客户端是创建Socket,而服务器端厠是创建ServerSocket

        创建ServerSocket时只需要填入端口号就可以了
         */
        ServerSocket ss = new ServerSocket(8080);
        /*
        接收来自于客户端的Socket对象 -- 调用accept()方法
         */
        Socket socket = ss.accept();
        /*
        获取对应的客户端的Socket中的输入流对象
         */
        InputStream is = socket.getInputStream();
        //创建一个By特ArrayOutputStream对象 --- 防止byte[] ---> String 时出现乱码
        //ByteArrayOutputStream类中封装了一个数组,这个数组还可以进行扩容,功能就是将我们的所有byte数据读入到一个数组中之后全部一次输出
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        /*
        创建一个缓冲数组
         */
        byte [] bytes = new byte[5];
        //创建临时变量用于存储read()方法的返回值
        int len = 0;
        while((len = is.read(bytes))!= -1){
            baos.write(bytes,0,len);
        }
        /*
        调用ByteArrayOutputStream类的toString()方法 --> 将ByteArrayOutputStream类中数组中存储的输出输出到控制台中
         */
        System.out.println(baos);
        /*
        通过使用来自客户端的socket对象调用getInetAddress()方法就可以得到对应客户端IP的InetAddress对象,然后
        调用这个对象的getHostAddress()方法就可以获取客户端的IP地址 -- 就可以看到是哪个客户端连接到了自己
         */
        System.out.println("接收到了来自于"+socket.getInetAddress().getHostAddress()+"的连接");

        /*
        资源的关闭
         */
        baos.close();
        is.close();
        socket.close();
        ss.close();
    }
}

  • 这里我们给出客户端
package 网络编程.TCP网络编程;

import java.net.InetAddress;
import java.io.IOException;
import java.net.Socket;
import java.io.OutputStream;

public class Client {
    public static void main(String[] args) throws IOException{
        /*
        首先创建一个InetAddress对象,表示一个IP地址,就是我们客户端要连接的服务器端的IP地址
        对应的InetAddress对象
         */
        InetAddress inet = InetAddress.getByName("127.0.0.1");
        /*
        创建Socket对象 ---> 客户端要创建Socket对象(Socket中封装IP + 端口号 + 数据)
         */
        Socket socket = new Socket(inet,8080);
        /*
        获取Socket对象对应的输出流对象
         */
        OutputStream os = socket.getOutputStream();
        /*
        使用Socket对象对应的输出流对象将数据写出
         */
        os.write("你好,我是客户端飞飞".getBytes());
        /*
        关闭流资源
         */
        os.close();
        socket.close();
    }
}

注意: 我们一定是要先运行服务器端,然后再运行客户端

  • 因为我们先运行服务端之后服务端要去接受来自客户端的Socket
举报

相关推荐

0 条评论