22.Java语言软件架构(CS/BS )、网络通信三要素、TCP通信、Socket、ServerSocket套接字

软件架构CS/BS

1.桌面应用程序(C-Client/S-Server)

在本机安装,并可以独立启动的程序;

              1).单机版:运行时不需要网络。例如:计算器、Word、扫雷......

              2).网络版:运行时需要联网。例如:QQ、斗地主、网游......

2.WEB应用程序(B-Browser/S-Server)

程序只需要发布到互联网上的一台服务器上即可,客户端只需要“浏览器”,就可以通过网址访问我们的服务器。例如:京东、淘宝、百度.....

网络通信三要素

1.IP地址:它是计算机在互联网上的唯一地址;

        十进制表示:最小IP : 000.000.000.000

                               最大IP : 255.255.255.255

        二进制表示:最小IP : 00000000.00000000.00000000.00000000

                               最大IP : 11111111.11111111.11111111.11111111

        其中:

              1).192.168.xxx.xxx : 不在公网上使用,做内网IP。

              2).10.xxx.xxx.xxx   : 不在公网上使用。

              3).127.0.0.1 : (localhost)不在公网上使用。它是本机IP。

2.端口: 相当于“收信人”

              物理端口:网卡口;

              逻辑端口:由操作系统维护,就是一组数字,范围:0--65535

              任何程序在启动时都可以自行申请端口,如果这个端口没被占用,操作系统就可以分配给你的程序使用。

                     1).一个程序启动后可以同时占用多个端口;

                     2).一个端口在某个时间点上不能被多个程序同时占用;

3.协议:双方都能看得懂的语言;

http、ftp、TCP协议、UDP协议...

UDP协议:

       1).将数据打包发送;

       2).数据包的大小有限制(64K)

       3).发送时,可以没有接收端;

              例如:共屏软件、视频会议系统

       TCP协议:

       1).数据不需要打包发送;

       2).数据大小没有显示;

       3).发送时,必须要有接收端;

              例如:飞秋。即时聊天程序...

TCP通信

通信原理:

1. 服务端程序,需要事先启动,等待客户端的连接。

2. 客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端。

在Java中,提供了两个类用于实现TCP通信程序:

1. 客户端: java.net.Socket 类表示。创建 Socket 对象向服务端发出连接请求,服务端响应请求,两者建立连接开始

通信。

2. 服务端: java.net.ServerSocket 类表示。创建 ServerSocket 对象,相当于开启一个服务,并等待客户端的连接。

Socket套接字、

构造方法:

public Socket(String host, int port) :创建套接字对象并将其连接到指定主机上的指定端口号。如果指定的host是null ,

则相当于指定地址为回送地址。

回送地址(127.x.x.x) 是本机回送地址(Loopback Address),主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,立即返回,不进行任何网络传输。

成员方法

public InputStream getInputStream() : 返回此套接字的输入流。

如果此Scoket具有相关联的通道,则生成的InputStream 的所有操作也关联该通道。

关闭生成的InputStream也将关闭相关的Socket。

public OutputStream getOutputStream() : 返回此套接字的输出流。

如果此Scoket具有相关联的通道,则生成的OutputStream 的所有操作也关联该通道。关闭生成的OutputStream也将关闭

相关的Socket。

public void close() :关闭此套接字。一旦一个socket被关闭,它不可再使用。关闭此socket也将关闭相关的

InputStream和OutputStream 。

public void shutdownOutput() : 禁用此套接字的输出流。任何先前写出的数据将被发送,随后终止输出流。

 

ServerSocket

构造方法

public ServerSocket(int port) 使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指定的端口号上,

参数port就是端口号。

成员方法

public Socket accept() 侦听并接受连接,返回一个新的Socket对象,用于和客户端实现通信。该方法会一直阻塞直到

建立连接。

通信实现

TCP发送端通信实现:

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

    Socket socket = new Socket("127.0.0.1",9999);
    OutputStream out = socket.getOutputStream();
    out.write("我发送了一个信息。".getBytes());
    System.out.println("客户端发送了一个信息");
    socket.close();
}

TCP接收端通信实现:

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

    ServerSocket serverSocket = new ServerSocket(9999);
    System.out.println("服务器等待连接.....");
    Socket socket = serverSocket.accept();
    System.out.println("客户端连接成功.....");
    InputStream in = socket.getInputStream();
    byte[] array = new byte[1024];
    int len = in.read(array);
    System.out.println("接收到的信息:" + new String(array,0,len));
    in.close();
    socket.close();
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于网络编程的技术问题,我可以回答。 Java SocketServerSocket 可以用于实现客户端服务端的网络通信。具体实现步骤如下: 1. 服务端创建 ServerSocket 对象,并指定一个端口号。用于监听客户端的连请求。 2. 客户端创建 Socket 对象,并指定服务端的 IP 地址和端口号。用于发起连请求。 3. 服务端使用 accept() 方法收客户端连并返回 Socket 对象。可以在循环中一直等待客户端的连请求。 4. 服务端和客户端通过 InputStream 和 OutputStream 进行数据的读写。 下面是 Java 代码示例: 服务端代码: ``` try { // 创建 ServerSocket 对象 ServerSocket serverSocket = new ServerSocket(8888); while (true) { System.out.println("等待客户端连..."); // 监听客户端的连请求 Socket socket = serverSocket.accept(); System.out.println("客户端已连:" + socket.getInetAddress().getHostName()); // 读取客户端发送过来的数据 InputStream inputStream = socket.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = bufferedReader.readLine()) != null) { System.out.println("客户端发送的数据:" + line); } // 向客户端发送数据 OutputStream outputStream = socket.getOutputStream(); PrintWriter printWriter = new PrintWriter(outputStream, true); printWriter.println("Hello, Client!"); // 关闭资源 bufferedReader.close(); inputStream.close(); printWriter.close(); outputStream.close(); socket.close(); } } catch (IOException e) { e.printStackTrace(); } ``` 客户端代码: ``` try { // 创建 Socket 对象 Socket socket = new Socket("192.168.0.1", 8888); // 向服务端发送数据 OutputStream outputStream = socket.getOutputStream(); PrintWriter printWriter = new PrintWriter(outputStream, true); printWriter.println("Hello, Server!"); // 读取服务端发送过来的数据 InputStream inputStream = socket.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = bufferedReader.readLine()) != null) { System.out.println("服务端发送的数据:" + line); } // 关闭资源 bufferedReader.close(); inputStream.close(); printWriter.close(); outputStream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } ``` 以上便是使用 Java SocketServerSocket 实现客户端服务端网络通信的代码示例。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值