Java study 1:The note of studying Socket which based UDP
UDP concept:
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。(from baike)
- UDP program:
因爲UDP協議是一種無連接的協議,所以
(1)、每次發送數據並不需要綁定,只需要使用DatagramPacket()構造好對應的數據包就可以了;
(2)、沒有像TCP一樣的ServerSocket 與Socket之分,雙方都用DatagramPacket初始化;
(3)、發送接收用send(數據包),receive(數據包)
下面上代碼:
*UDP並無Server與Client之分,但是代碼一個發送一個接受就起了這名字(這並不重要~逃)
*發送成功之後雙方就建立了一個鏈接(虛),可以互發數據
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException; public class UdpServer {
public static void main(String[] args) {
DatagramSocket dgs = null;
try {
dgs=new DatagramSocket(8888);
//receive
byte[] buf=new byte[256];
int length=256;
DatagramPacket dgp=new DatagramPacket(buf, length);
dgs.receive(dgp);
System.out.println("receive from client:"+new String(buf, 0, length)); //send
String str="yeah i have receivered~";
System.out.println(dgp.getAddress());//use last time's packet to get the address
System.out.println(dgp.getPort());
DatagramPacket dgp_send=new DatagramPacket(str.getBytes(),str.length(), dgp.getAddress(), dgp.getPort());
dgs.send(dgp_send);
dgs.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
dgs.close();
}
}
}
UdpServer
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress; public class UdpClient {
public static void main(String[] args) {
DatagramSocket dgs = null;
try {
dgs=new DatagramSocket();
//send->server
String str="so dirty haha~";
DatagramPacket dgp_send=new DatagramPacket(str.getBytes(),0,str.length(),InetAddress.getByName("localhost"),8888);
dgs.send(dgp_send);
//receive from server
byte[] buf=new byte[256];
DatagramPacket dgp2_receive=new DatagramPacket(buf, 256);
dgs.receive(dgp2_receive);
System.out.println("receive from server:"+new String(buf,0,256));
dgs.close(); } catch (Exception e) {
System.out.println("error:"+e);
}
}
}
UdpClient
p.s.I:Server 的 send 部分使用之前用來接收數據的包dgp來取得發送者的address以及port,然後再用新的DatagramPacket來發送數據
p.s.II:DatagramPacket的搆造函數中,byte[]用來放數據,length用來放長度,程序簡單所以數字亂寫的(ha
Java study 1:The note of studying Socket which based UDP的更多相关文章
- Java study 2:The note of studying Socket which based TCP
TCP concept: 传输控制协议(Transmission Control Protocol, TCP)是一种面向连接(连接导向)的.可靠的.基于字节流的运输层(Transport layer) ...
- java.net.SocketException: Software caused connection abort: socket write error
用Java客户端程序访问Java Web服务器时出错: java.net.SocketException: Software caused connection abort: socket write ...
- [JAVA] java class 基本定义 Note
java class 基本定义 Note 1 package abeen.note; 2 import java.util.*; 3 4 5 /* 6 java calss 基本 7 */ 8 pub ...
- Java从零开始学四十五(Socket编程基础)
一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- testNG java.net.SocketException: Software caused connection abort: socket write error
执行用例报错,提示 java.net.SocketException: Software caused connection abort: socket write error java.net.So ...
- Caused by: java.net.SocketException: Software caused connection abort: socket write error
1.错误描述 [ERROR:]2015-05-06 10:54:18,967 [异常拦截] ClientAbortException: java.net.SocketException: Softwa ...
- ClientAbortException: java.net.SocketException: Software caused connection abort: socket write erro
1.错误描述 ClientAbortException: java.net.SocketException: Software caused connection abort: socket writ ...
- 【Java】NO.80.Note.1.Java.1.001-【Java 各种特性概念】
1.0.0 Summary Tittle:[Java]NO.80.Note.1.Java.1.001-[Java 各种特性概念] Style:Java Series:Java Since:2018-0 ...
- 运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接
运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接 最近在项目中可能要用到socket相关的东西来发送消息,所以初步研究了下socket的TC ...
随机推荐
- 硬盘IO,SAS,SATA,和HD TUNE
SAS的接口技术可以向下兼容SATA.具体来说,二者的兼容性主要体现在物理层和协议层的兼容. SAS系统的背板(Backplane)既可以连接具有双端口.高性能的SAS驱动器,也可以连接高容量.低成本 ...
- 16.缓存(Cache)
如果每次进入页面的时候都查询数据库生成页面内容的话,如果访问量非常大,则网站性能会非常差.而如果只有第一次访问的时候才查询数据库生成页面内容,以后都直接输出内容,则能提高系统性能,这样无论有多少人访问 ...
- nginx 1.3.9/1.4.0 x86 Brute Force Remote Exploit
测试方法: 本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! #nginx 1.3.9/1.4.0 x86 brute force remote exploit # copyri ...
- 基于物联网操作系统HelloX的智慧家庭体系架构
基于物联网操作系统HelloX的智慧家庭体系架构 智慧家庭是物联网的一个分支应用,是一个被广泛认同的巨大IT市场空间.目前市场上已经有很多针对智慧家庭的产品或解决方案,但与移动互联网不同,智慧家庭至今 ...
- 图论(网络流):SCOI 2007 修车
同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待的时间最小 ...
- Delphi NativeXml用法攻略 转
NativeXml可以在官网上下载,下载后将文件夹放在指定地方,打开DELPHI在其环境变量中引用NativeXml路径,然后在程序中引用NativeXml单元,我们就可以使用NativeXml了. ...
- java工作流bpm开发ERP实例
今天看了一个java工作流bpm开发ERP的例子,文章介绍:http://tech.it168.com/a2009/0507/275/000000275294_14.shtml 增加数据块 一路照做就 ...
- Java---字节输入,文件操作,病毒制造,请谨慎运行!
今天刚刚学了Java文件操作,跟着老师的思路,迫不及待的制造了这个小病毒. 用到的是一些小知识,很简单. 创建文件和文件夹,向文件中写入字节. 我已渐渐的爱上了编程!!! 下面附上完整代码: impo ...
- java JDK安装
JDK安装包下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 图释安装 ...
- 2012 A 《中国近现代史纲要》课程期末考试试卷
湖南人文科技学院2012—2013学年第1学期公共课 2011级<中国近现代史纲要>课程期末考试试卷 考核方式:(开卷) ...