-
UDP多线程通信: 服务器端线程: package udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * UDP多线程通信 * @author henry * */ public class UDPServerThread extends Thread { private DatagramSocket socket = null; private DatagramPacket packet=null; public UDPServerThread(DatagramSocket socket,DatagramPacket packet) { this.socket = socket; this.packet=packet; } public void run() { try { // 4.读取数据 String info = new String(packet.getData(), 0, packet.getLength()); System.out.println("我是服务器,客户端说:" + info); /** * 向客户端响应 */ // 1.定义客户端的地址、端口号数据 InetAddress address = packet.getAddress(); int port = packet.getPort(); byte[] data2 = "欢迎您".getBytes(); // 2.创建数据报,包含相应的数据信息 DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port); // 3.响应客户端 socket.send(packet2); } catch (IOException e) { e.printStackTrace(); } } }查看全部
-
Socket通信实现步骤 1.创建ServerSocket和Socket 2.打开链接到Socket的输入/输出流 3.按照协议对Socket进行读/写操作 4.关闭输入输出流、关闭Socket查看全部
-
UDP编程-服务器向客户端响应数据(与客户端向服务器发送数据类似) 1、定义客户端的地址、端口号、数据。通过DatagramPacket的.getAddress()方法获取客户端的地址,通过.getPort()方法获取端口号。 2、创建数据报DatagramPacket,包含响应的数据信息。 3、响应客户端。调用DatagramSocket的.send()方法。 4、关闭资源 UDP编程-客户端接受服务器端响应的数据 1、创建数据报DatagramPacket,用于接受服务器端响应的数据。首先创建一个字节数组。 2、接受服务器端响应的数据。调用DatagramPacket的.receive()方法。 3、读取数据。将字节数组转变为字符串。 4、关闭资源。查看全部
-
基于UDP的多线程实现多客户端通信 服务器端: DatagramSocket socket=new DatagramSocket(8818); byte[] data=new byte[1024]; System.out.println("****服务器启动,等待客户端连接****"); int count=1; while(true){ DatagramPacket packet=new DatagramPacket(data, data.length); socket.receive(packet); ServerThread serverThread=new ServerThread(packet, socket); serverThread.start(); System.out.println("客户端数量:"+count++); 服务器线程处理类: public class ServerThread extends Thread { DatagramPacket packet; DatagramSocket socket; public ServerThread(DatagramPacket packet, DatagramSocket socket) { super(); this.packet = packet; this.socket = socket; } public void run(){ //获取客户端信息 byte[] data=packet.getData(); String info1=new String(data, 0, packet.getLength()); System.out.println("客户端说:"+info1); //响应客户端 InetAddress address=packet.getAddress(); int port=packet.getPort(); byte[] data1="欢迎您!".getBytes(); DatagramPacket packet1=new DatagramPacket(data1, data1.length, address, port); } }查看全部
-
* UDP相较于TCP,不需要进行复杂的设定输入输出流,只需要设定数据报,即DatagramPacket。而TCP的发送以及接收消息,是通过socket.getInputStream()或者getOutputStream()方法,而UDP是直接设置了,DatagramSocket,通过其send()或者receive()方法来接收或发送消息。TCP的关键组成有server端的ServerSocket.accept()方法,这个方法是直到接收到了客户端的连接才会返回一个Socket,用于接下来的输入和输出。所以说,TCP的数据传输是需要提前连接、三方握手,数据传输非常安全。而UDP是不需要提前连接的,无需等待对方回答,所以不保证数据不丢失查看全部
-
关闭资源为何要加一个判断条件:不为空 ??? 这是一种正确、严谨的写法。 验证非NULL是编码中很重要的一环。假如本来就是NULL,这是调用各自的close()方法是会报错的。 如果在实例化这些对象时出错导致这些对象为NULL,或是实例化没问题但中途出了什么异常导致这些对象为NULL,都会在未经验证非NULL前尝试调用close()方法关闭时报错。 p.s. 讲师写socket关闭条件时写的是if(socket!=null)socket.close();这样写没错,但我想说一般是另一种写法if(!socket.isClosed())socket.close();查看全部
-
服务器端创建serversocket,循环调用accept()等待客户端连接 客户端创建一个socket并请求和服务器端连接 服务器接受客户端请求,创建socket与该客户建立专线连接 建立连接的两个socket在一个单独的线程上对话 服务器继续等待新的连接查看全部
-
线程处理查看全部
-
1.InetAddress类没有构造方法,所以不能直接new出一个对象; 可以通过InetAddress类的静态方法获得InetAddress的对象; InetAddress.getLocalHost(); InetAddress.getByName(""); 2.类主要方法: String - address.getHostName(); String - address.getHostAddress(); public static InetAddress getByName(String host) throws UnknownHostException 在给定主机名的情况下确定主机的 IP 地址。 主机名可以是机器名(如 "java.sun.com"),也可以是其 IP 地址的文本表示形式查看全部
-
/* * 服务器端,实现基于UDP的用户登陆 */ public class UDPServer { public static void main(String[] args) throws IOException { /* * 接收客户端发送的数据 */ //1.创建服务器端DatagramSocket,指定端口 DatagramSocket socket=new DatagramSocket(8800); //2.创建数据报,用于接收客户端发送的数据 byte[] data =new byte[1024];//创建字节数组,指定接收的数据包的大小 DatagramPacket packet=new DatagramPacket(data, data.length); //3.接收客户端发送的数据 System.out.println("****服务器端已经启动,等待客户端发送数据"); socket.receive(packet);//此方法在接收到数据报之前会一直阻塞 //4.读取数据 String info=new String(data, 0, packet.getLength()); System.out.println("我是服务器,客户端说:"+info); }查看全部
-
设置多线程的优先级,否则运行会慢查看全部
-
发送端接收接收端的数据报包 byte[] data2 = new byte[1024]; DatagramPacket dp2 = new DatagramPacket(data2,data2.length); ds.receive(dp2); String thedata2 = new String(data2,0,dp2.getLength()); ds.close();查看全部
-
接收端向发送端发送数据报包 从发送端的数据报包中获取InetAddress和 Port byte[] data2 = "xx".getBytes(); DatagramPacket dp2 = new DatagramPacket(data2,data2.length,dp.getInetAddress(),dp.getPort()); ds.send(dp2); ds.close();查看全部
-
UDP----------发送端 DatagramSocket ds = new DtagramSocket(); Byte[] data = "xxx".getBytes(); DtagramPacket dp = new DatagramPacket(data,data.length,InetAddress.getByName("localhost"),15000); ds.send(dp); ds.close();查看全部
-
为什么定义的服务器接收客户端数据的info是null查看全部
举报
0/150
提交
取消