为了账号安全,请及时绑定邮箱和手机立即绑定

Java Socket应用---通信是这样练成的

难度初级
时长 2小时 0分
学习人数
综合评分9.77
496人评价 查看评价
9.9 内容实用
9.8 简洁易懂
9.6 逻辑清晰
  • 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(); } } }
    查看全部
  • B_C
    Socket通信实现步骤 1.创建ServerSocket和Socket 2.打开链接到Socket的输入/输出流 3.按照协议对Socket进行读/写操作 4.关闭输入输出流、关闭Socket
    查看全部
    2 采集 收起 来源:Socket 简介

    2017-04-18

  • 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); }
    查看全部
  • 设置多线程的优先级,否则运行会慢
    查看全部
    1 采集 收起 来源:Socket 总结

    2016-01-11

  • 发送端接收接收端的数据报包 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
提交
取消
课程须知
本课程是 Java 开发课程的高级课程,需要对 Java 中的面向对象、IO、多线程,以及网络相关知识有一定的基础
老师告诉你能学到什么?
1、网络相关的基础知识 2、Java 中网络相关 API 的应用 3、实现基于 TCP 的 Socket 编程 4、实现基于 UDP 的 Socket 编程

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!