java网络编程下

做~自己de王妃 提交于 2020-03-06 03:32:29
发送端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/*
流程:
 1. 创建UDP服务器对应的发送端Socket
 2. 准备对应数据包,需要带有指定数据
 3. 发送数据 send
 4. 关闭UDP发送端
 */

public class SenderDemo1 {
 public static void main(String[] args) throws IOException {
  System.out.println("发送端启动");
  // 创建对应的Socket
  DatagramSocket socket = new DatagramSocket();
  // 准备数据包
  byte[] bytes = "今天中午吃蒸羊羔...".getBytes();
  DatagramPacket packet = new DatagramPacket(bytes,  // 字节数组数据
  bytes.length,  // 字节数组数据长度
    InetAddress.getLocalHost(),  // 指定接收端IP地址
    8848); // 8848对应端口号
      // 发送数据包
  socket.send(packet);
  
  // 关闭UDP发送端
  socket.close();
 }
}
接收端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/*
流程:
 1. 打开UDP服务,并且监听指定端口
 2. 创建新的空数据包
 3. 通过Socket接收数据 receive
 4. 关闭UDP服务接收端
 */
public class ReceiveDemo1 {
 public static void main(String[] args) throws IOException {
  // 创建Socket监听端口
    DatagramSocket socket = new DatagramSocket(8848);
  
  // 准备空数据包
  byte[] buf = new byte[1024];
    DatagramPacket packet = new DatagramPacket(buf, buf.length);
  
  // 接收数据
  socket.receive(packet);
  
  // 确定接收到的字节长度
    int length = packet.getLength();
  
  System.out.println(new String(buf, 0, length));
  
  // 关闭socket
  socket.close();
  
 }
}
UDP数据传递丢失问题
  1. 网络不够好,稳定性不行,带宽不够
  2. 电脑性能不好

2. TCP

2.1 TCP概述

TCP相对于UDP比较稳定的传输协议,这里存在三次握手,保证连接状态,同时有明确的客户端和服务端之分
TCP服务中需要服务器端先启动,需要监听指定端口,等待客户端连接。
客户端主动连接服务器,和服务器连接之后,才可以进行数据交互,服务器不能主动连接客户端的。
TCP操作而言,Java中提供了两个Socket

  1. 服务端Socket
    java.net.ServerSocket;
    创建对应的ServerScoket开启服务器,等待客户端连接。
  2. 客户端Socket
    java.net.Socket
    创建客户端Scoket,并且连接服务器,同时将Socket发送给服务器绑定注册。

在这里插入图片描述

2.2 Socket 客户端Socket

构造方法 Constructor
 Socket(String host, int port);
 host是服务器IP地址,port对应服务器程序的端口号
  通过指定的服务器IP地址和端口号,获取TCP连接对象

成员方法 Method
 InputStream getInputStream();
 获取Socket对象输入字节流,可以从服务器获取对应的数据
  InputStream是一个资源,需要在程序退出是关闭
  Read
 
  OutputStream getOutputStream();
  获取Sokcet对象输出字节流,可以发送数据到服务器
 OutputStream是一个资源,需要在程序退出是关闭
  Write
  void close();
  关闭客户端Socket
 
  void shutdownOutput();
  禁止当前Socket发送数据

TCP/IP协议对应的Socket是给予IO流实现的

2.3 ServerSocket服务端Socket

在服务端开启Socket服务器
构造方法 Constructor:
 ServerSocket(int port);
 开启ServerSocket服务器,并且明确当前服务端口是谁

成员方法 Method:
  Socket accept();
   监听并且连接,得到一个Socket对象,同时该方法是一个阻塞方法,会处于一个始终的监听状态
   返回的是Socket,也就是客户端Socket对象,获取到当前Socket对象,相对于获取到客户端连接,同时使用的Socket和客户端一致。
   在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!