Java实现网络通信(TCP程序设计)


提示:以下是本篇文章正文内容,下面案例可供参考

一、TCP网络程序设计是什么?


TCP网络程序设计是指利用Socket类编写通信程序。
利用TCP协议进行通信的程序有主次之分,一个称为服务器端程序,另一个称为客户端程序


二、TCP网络程序设计原理:

1.图示:

在这里插入图片描述

2.客户端与服务器端分析:

Socket的本质就是将数据抽象成I/O流,在网络间传输数据
套接字两台机器间通信的端点

服务器端:可以给客户端写出数据,读取客户端发来的数据
客户端:可以读取服务器端发来的数据,给服务器写出数据

用到的工具类:
服务器端:ServerSocket
创建对象:ServerSocket(int port)
该方法创建绑定到特定端口的服务器套接字
参数port为端口号由自己定义除0~1024以及安装的软件默认占用的端口号之外的端口号
调用方法:Socket(返回值类型) accept()
该方法侦听并接收到此套接字的连接

客户端:Socket
创建对象:Socket(String host,int port)
参数host为IP地址port为端口号
该方法创建一个流套接字并将其连接到指定主机上的端口号
调用方法:InputStream类中的getInputStream()方法
该方法能够返回此套接字的输入流
                  OutputStream类中的getOutputStream()方法
该方法能够返回此套接字的输出流

3.如何利用DOS窗口查看自己的IP地址:

①打开cmd管理员窗口

按下win+r键快速启动命令窗口,输入cmd打开管理员界面
在这里插入图片描述
在这里插入图片描述

②输入命令查看IP地址

输入 ipconfig 命令即可获取到本机的地址信息,IPv4便为本机的IP地址
在这里插入图片描述

扫描二维码关注公众号,回复: 13014377 查看本文章

三、网络通信案例测试:

1.服务器端类:

package dreamfly.net.server;

//读取客户端发来的数据,给客户端写出数据

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

public class Server {
    
    

    public static void main(String[] args) throws IOException {
    
    

        //1.开启服务器,参数是指开着的端口号
        ServerSocket server = new ServerSocket(8899);
        System.out.println("服务器已成功启动");
        //2.接收客户端发来的连接
        Socket socket = server.accept();
        System.out.println("接收到客户端发来的请求");
        //3.获取读取流
        InputStream in = socket.getInputStream();
        //4.读取数据
//        int data = in.read();      //默认返回的是整数
        for (int i = 0;i < 5;i++){
    
    
            char data = (char)in.read();
            System.out.print(data);
        }
        //5.给客户端写出数据
        System.out.println();
        OutputStream out = socket.getOutputStream();
        out.write("world".getBytes());
        System.out.println("服务器端成功发送数据");
        out.close();
    }
}

运行时要先在方法处抛出IOException或者用try/catch语句块包围可能会发生异常的语句,在这里我选择了第一种抛出IOException,其次在服务器端类中输出语句是为了检测是否成功发送出数据,如果没有执行到输出语句则说明数据没有发送成功。

2.客户端类:

package dreamfly.net.client;

//读取服务器端发来的数据,给服务器端写出数据

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

public class Client {
    
    

    public static void main(String[] args) throws IOException {
    
    
        //1.连接到指定的服务器(ip+port)
        Socket socket = new Socket("127.0.0.1",8899);
        System.out.println("已连接成功");
        //2.获取写出流
        OutputStream out = socket.getOutputStream();
        //3.写出数据,字节流只能写出整数或字节数组
        //将hello对应整数编程对应的字节数组,getBytes()将String转换为byte[]
        out.write("hello".getBytes());
        System.out.println("客户端成功发送数据");
        InputStream in = socket.getInputStream();
        for (int i = 0;i < 5;i++){
    
    
            char data = (char)in.read();
            System.out.print(data);
        }
        System.out.println();
        System.out.println("成功接收服务器端数据");
        out.close();
    }
}

四、运行结果:

1.开启服务器端

在这里插入图片描述

2.开启客户端

服务器端运行结果:
在这里插入图片描述

客户端运行结果:
在这里插入图片描述

3.注意事项:

运行顺序为:先开启服务器端再运行客户端
OutStream 字节流只能写出整数或字节数组要传输字符串类型的数据时要用getBytes()方法将String类型的数据转换为byte[]字节数组

如果在没有开启服务器端的情况下开启客户端,将会有以下的运行结果:
在这里插入图片描述
原因:因为服务器端口号没有打开,客户端无法连接到服务器对应端口


五、总结

以上就是Java实现简单的网络通信的内容,附上本文中用到的类在API中的描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_48455576/article/details/113197775