- 浏览: 558105 次
- 性别:
- 来自: 杭州
-
文章分类
最新评论
-
GGGGeek:
看完了博主的博文,如果没猜错的话应该是浙大吧?很多优秀的人因为 ...
转《D君的故事》 以时刻警示自己 -
游牧民族:
楼主写的不错,学习了,最近对爬虫比较感兴趣,也写了些爬虫相关的 ...
通用爬虫框架及heritrix爬虫介绍 -
jimmee:
jerome_s 写道ice 你怎么看? 粗略的看了一下ice ...
MessagePack, Protocol Buffers和Thrift序列化框架原理和比较说明 -
jerome_s:
ice 你怎么看?
MessagePack, Protocol Buffers和Thrift序列化框架原理和比较说明 -
jimmee:
nk_tocean 写道照着做了,但是不行啊,还是乱码.先确认 ...
hive编写udf处理非utf-8数据
1.UDP套接字与TCP套接字不同。UDP套接字在使用前不需要进行连接。TCP协议与电话通信相似,而UDP协议则与邮件通信相似:你寄包裹或信件时不要进行“连接”,但是你的为每个包裹和信件制定目的地址。类似地,每条信息(datagram,即数据报文)负载了自己的地址信息,并与其他信息相互独立。在接收信息时,UDP套接字扮演的角色就像是一个信箱,从不同地址发送来的信件和包裹都可以放到里面。一旦被创建,UDP套接字就可以用来连续地向不同的地址发送消息,或从任何地址接收信息。
UDP套接字将保留边界信息。UDP不像TCP一样,它是尽可能地传送消息,但并不保证信息一定能成功到达目的地址,而且信息到达的顺序与其发送顺序不一定一致(就像通过邮政部分寄信一样)。因此,UDP套接字的程序必须准备好处理信息的丢失和重排。
UDP的优点之一是效率较高,其次是灵活性。
Java通过DatagramPacket类和DatagramSocket类来使用UDP套接字。客户端和服务端都使用DatagramSocket来发送数据,使用DatagramPacket来接收数据。
发送信息时,Java程序创建一个包含了待发送信息的DatagramPacket实例,并将其作为参数传递给DatagramSocket类的send()方法。接收信息时,Java程序首先创建一个DatagramPacket类的实例,该实例中预先分配了一些空间(一个字节数组byte[]),并将接收到的信息存放在该空间中。然后把该实例作为参数传递给DatagramSocket类的receive()方法。
DatagramPacket的内部有length和offset字段,如果指定了offset,数据报文的数据部分将从字节数组的指定位置发送或接收数据。length参数指定了字节数组中在发送时要传输的字节数,活在接收数据时所能接收的最多字节数。length要比data.length小,但不能比它大。
UDP客户端:
UDP的服务器端:
注意:DatagramPacket的getData()方法的使用,它返回数据缓冲区,是一个字节数组,需要注意。
packet.setData(buf, offset,length);设置了接收数据时放到缓存去buf中的位置
,因此接收的数据new String(packet.getData(),packet.getOffset(),packet.getLength())的方式构造的。
UDP套接字将保留边界信息。UDP不像TCP一样,它是尽可能地传送消息,但并不保证信息一定能成功到达目的地址,而且信息到达的顺序与其发送顺序不一定一致(就像通过邮政部分寄信一样)。因此,UDP套接字的程序必须准备好处理信息的丢失和重排。
UDP的优点之一是效率较高,其次是灵活性。
Java通过DatagramPacket类和DatagramSocket类来使用UDP套接字。客户端和服务端都使用DatagramSocket来发送数据,使用DatagramPacket来接收数据。
发送信息时,Java程序创建一个包含了待发送信息的DatagramPacket实例,并将其作为参数传递给DatagramSocket类的send()方法。接收信息时,Java程序首先创建一个DatagramPacket类的实例,该实例中预先分配了一些空间(一个字节数组byte[]),并将接收到的信息存放在该空间中。然后把该实例作为参数传递给DatagramSocket类的receive()方法。
DatagramPacket的内部有length和offset字段,如果指定了offset,数据报文的数据部分将从字节数组的指定位置发送或接收数据。length参数指定了字节数组中在发送时要传输的字节数,活在接收数据时所能接收的最多字节数。length要比data.length小,但不能比它大。
UDP客户端:
import java.io.IOException; import java.io.InterruptedIOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPEchoClientTimeout { private static final int TIMEOUT=3000; private static final int MAXTRIES=5; public static void main(String[] args) throws IOException { if(args.length<2||args.length>3){ throw new IllegalArgumentException("Parameter(s):<Server> <Word> [<Port>]"); } InetAddress serverAddress=InetAddress.getByName(args[0]);//server address; byte [] bytesToSend=args[1].getBytes(); int servPort=(args.length==3)?Integer.parseInt(args[2]):7; //1.创建一个DatagramSocket实例,可以选择对本地地址和端口进行设置。 DatagramSocket socket=new DatagramSocket(); //设置receive()方法的最长阻塞时间 socket.setSoTimeout(TIMEOUT); DatagramPacket sendPacket=new DatagramPacket(bytesToSend,bytesToSend.length,serverAddress,servPort); DatagramPacket receivePacket=new DatagramPacket(new byte[bytesToSend.length],bytesToSend.length); int tries=0; boolean receivedResponse=false; do{ //2.使用DatagramSocket类的send()和receive()方法来发送和接收DatagramPacket实例,进行通信 socket.send(sendPacket); try{ socket.receive(receivePacket); if(!receivePacket.getAddress().equals(serverAddress)){ throw new IOException("Received packet from an unknown source"); } receivedResponse=true; }catch(InterruptedIOException e){ tries+=1; System.out.println("Timed out,"+(MAXTRIES-tries)+" more tries ..."); } }while(!receivedResponse&&(tries<MAXTRIES)); if(receivedResponse){ System.out.println("Received: "+new String(receivePacket.getData())); }else{ System.out.println("No response -- giving up."); } //3.通信完成后,使用DatagramSocket类的close方法来销毁该套接字 socket.close(); } }
UDP的服务器端:
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPEchoServer { private static final int ECHOMAX=255;//max size of echo datagram public static void main(String[] args) throws IOException { if(args.length!=1){ throw new IllegalArgumentException("Parameter(s):<Port>"); } int servPort=Integer.parseInt(args[0]); //1.创建一个DatagramSocket实例,指定本地端口号,可以选择指定本地地址 DatagramSocket socket=new DatagramSocket(servPort); DatagramPacket packet=new DatagramPacket(new byte[ECHOMAX],ECHOMAX); while(true){ //2.使用DatagramSocket的receive方法来接收一个DatagramPacket实例。 socket.receive(packet); System.out.println("Handling client at "+packet.getAddress().getHostAddress()+" on port "+packet.getPort()); socket.send(packet); packet.setLength(ECHOMAX); } } }
注意:DatagramPacket的getData()方法的使用,它返回数据缓冲区,是一个字节数组,需要注意。
packet.setData(buf, offset,length);设置了接收数据时放到缓存去buf中的位置
,因此接收的数据new String(packet.getData(),packet.getOffset(),packet.getLength())的方式构造的。
发表评论
-
[转载]并发之痛 Thread,Goroutine,Actor
2017-04-06 19:21 783转自 http://jolestar.com/pa ... -
JVM动态调整字节码
2016-04-14 19:27 1445粗略的点开btrace的源码看了一下,实际上他只是封装了JD ... -
java字节码常量池处理说明
2016-04-13 23:23 13431. 根据java的字节码格式说明,常量池中每一项的大小不一 ... -
Mac OSX 10.10 Yosemite编译OpenJDK 8
2016-04-03 18:14 3749编译时间:2016-04-03 系统版本:Mac OS ... -
Java 并发之 ConcurrentSkipListMap 简述
2015-09-20 20:24 1255JCIP 提到了在 Java 6 中引入了两个新的并发集合类 ... -
hbase等源码导入eclipse流程
2015-09-20 19:00 1877hbase: 1. 下载源码 svn co ht ... -
最简单的平衡树(红-黑树)的实现
2015-09-04 08:04 1347在二叉搜索树(BST)的基础上,要实现一颗平衡树,可以使用 ... -
多线程程序中操作的原子性[转载]
2014-12-06 10:49 13120. 背景 原子操作就是不可再分的操作。在多线程程序中原子 ... -
6. 内存屏障[转载]
2014-11-26 00:07 823原文地址 作者:Martin Thompson 译者: ... -
5.合并写(write combining)[转载]
2014-11-25 21:54 887原文地址 译者:无叶 ... -
4. 内存访问模型的重要性[转载]
2014-11-25 21:53 1176在高性能的计算中,我 ... -
3. Java 7与伪共享的新仇旧恨[转载]
2014-11-25 21:45 1001原文:False Shareing && J ... -
2. 伪共享(False Sharing)[转载]
2014-11-25 21:40 967作者:Martin Thompson 译者:丁一 缓存 ... -
lucene索引创建的理解思路
2014-06-29 23:12 1605虽然lucene4很早就出来,但是这里仍然以lucene3. ... -
lucene的拼写检查的实现原理
2014-06-08 18:19 14351. 建索引时, 使用ngram的方式创建索引 Sp ... -
字符串相似算法-(3) NGram Distance
2014-06-08 17:54 5058就是N-Gram version of edit dista ... -
字符串相似算法-(2) Levenshtein distance
2014-06-08 16:32 2379编辑距离概念描述: ... -
字符串相似算法-(1) Jaro-Winkler Distance
2014-06-08 12:05 6951Jaro-Winkler Distance 算法 ... -
tomcat参数编码处理过程
2014-06-07 09:49 19601. org.apache.coyote.http11 ... -
SSLEngine的示例
2014-05-26 19:44 7953为什么要使用SSLEngine, 参考javadoc的说明 ...
相关推荐
此外,`代码中国.txt`可能包含了一些与TCP/IP编程相关的示例代码,如创建socket连接或解析IP数据包的代码。`代码中国.url`可能是一个链接,指向更多关于TCP/IP编程的资源。至于`ScanMail`,这可能是某种网络安全工具...
- **应用编程接口(API)**:提供了与网络通信相关的编程接口,如Socket API,它是TCP/IP网络编程的基础。 #### 五、数据链路层 数据链路层是TCP/IP模型中的最低层之一,主要功能包括: - 为IP模块发送和接收IP...
应用编程接口(API)如socket和TLI,提供了编程人员与TCP/IP协议交互的接口。socket接口在Berkeley操作系统中广泛使用,对网络发展产生了深远影响。 数据链路层的主要任务是为IP、ARP和RARP提供服务,负责将数据...
通过阅读TCP UDP笔记.doc,深入理解TCP连接与断开过程.pdf中的细节,以及TCP与UDP编程步骤.pdf的实践指导,初学者可以逐步构建起完整的TCP/UDP编程能力。在实际项目中,灵活运用这些知识,可以有效地处理各种网络...
4. 在安装过程完成后,在Microchip程序组下会出现“TCP/IP Stack with BSD Socket API”项。完整的源代码将被复制到您计算机根驱动盘的`pic32_solutions`目录中。 #### 结论 带有ENC28J60驱动的BSD套接字API的...
SocketTool V4.0版本支持JavaScript编程方式,从而增加了灵活性。 JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,广泛用于客户端的脚本...
总的来说,Linux TCP/IP协议栈笔记是深入理解网络通信、操作系统内核工作原理的宝贵资源,对于提升系统编程和网络运维能力大有裨益。通过学习,不仅可以掌握TCP/IP协议的基本原理,还能了解其在Linux环境下的具体...
Socket编程是实现TCP/IP或UDP协议的应用层接口。在Python、Java、C++等编程语言中,都有Socket库供开发者使用。通过Socket,我们可以创建服务器端程序来监听客户端的连接请求,也可以创建客户端程序来发起连接并发送...
学习Socket编程不仅需要理解基本的TCP/IP概念,还需要熟悉Java的IO流操作。通过实践和不断探索,可以掌握创建高效、稳定网络应用的关键技能。希望这个学习笔记能为你提供有价值的参考,助你在Socket网络编程的道路上...
TCP/IP 协议族是一个协议的集合,包括 IP 协议、ICMP 协议、TCP 协议、UDP 协议、HTTP 协议、FTP 协议、POP3 协议等等。 TCP/IP 协议族的结构可以分为四层:应用层、传输层、网络层和数据链路层。 应用层是 TCP/IP ...
读书笔记:C#网络编程与JAVA网络通信。TCP, UDP的Socket编程多线程阻塞非阻塞等。
对于面向连接的 TCP Socket 和无连接的 UDP Socket,其编程步骤有所不同: 1. **TCP Socket 编程步骤**: - **创建 Socket**:使用 `Socket` 构造函数创建一个新的 Socket 实例。 - **绑定 IP 和端口**:使用 `...
本笔记将深入探讨Linux Socket编程的基本概念、API使用以及常见问题。 首先,我们来了解什么是Socket。Socket,即套接字,是网络通信中的一个抽象概念,它代表了通信两端的一个端点。在Linux中,Socket分为流式...
Java学习笔记-Scoket.pdf是关于Java编程语言中Socket编程的学习笔记,涵盖了Socket编程的基础知识、Java中Socket的使用、Socket通信的原理及应用等方面的内容。 Socket编程的基础知识 在Java编程语言中,Socket是...
2. **Java网络编程API**:Java提供了一套丰富的网络编程接口,如`Socket`和`ServerSocket`用于TCP通信,`DatagramSocket`和`DatagramPacket`用于UDP通信。这些类在`java.net`包下,它们允许我们创建客户端和服务器...
在本压缩包"LinuxNetworkKernelSource.rar"中,包含的是针对Linux下TCP/IP协议栈的学习笔记,这对于我们理解网络通信的底层原理至关重要。TCP/IP协议栈是互联网通信的基础,由四层模型(在网络层有时被分为两层)...
`IPEndPoint`类表示TCP/IP网络上的一个端点,即一个IP地址和一个端口号的组合。创建`IPEndPoint`对象有两种常见方式: - **构造函数**:可以使用`long`类型的地址和`int`类型的端口创建,或使用`IPAddress`和`int`...
包括 1.TCP-IP详解卷1:协议 中文版PDF...2.高级TCP/IP编程 中文版PDF 3.TCPIP Sockets in Java 2nd 英文版PDF, 4.Advanced JAVA networking英文版PDF 5.中文版Socket Java教程 6.Socket Java学习笔记 7.UDP简单案例