Socket是网络驱动层提供给应用程序编程的接口和一种机制。我们可以认为Socket是应用程序创建的一个港口码头,应用程序只要把装着货物的集装箱(在程序中就是要通过网络发送的数据)放到港口码头上,就算完成了货物的运送,剩下的工作就有货运公司去处理了(在计算机中由驱动程序来充当货运公司)。
对于接收方来说,应用程序也要创建一个港口码头,然后就一直等待到该码头的货物到达,最后宠码头上取走货物(发给该应用程序的数据)。
Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和Port。此后,应用程序送给Socket 数据,由 Socket 交给驱动程序向网络上发送出去。计算机服务端从网络上收到与该 Socket 绑定的 IP+Port 相关的数据后,由驱动程序交给 Socket,应用程序便可从该Socket 中提取接收到的数据。网络应用程序就是这样通过Socket进行数据的发送与接收的。
package com.java.DataGamesocket;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
/**
* UDP(user datagram protocol:用户数据报协议)实例
* 负责发送数据类
* @author songlailiang
*
*/
public class Udpsend {
private static DatagramSocket ds;
public static void main(String[] args) {
send();
}
public static void send(){
try {
ds = new DatagramSocket(); //创建DatagramSocket对象,用于UDP发送或接收数据
String str = "您好,hello word!";
DatagramPacket dp = new DatagramPacket(str.getBytes(), //创建发送包对象,
str.getBytes().length, //这里最好不要写成str.length,因为如果发送的内容是汉字,一个汉字占用2个字节,接收的时候可能会造成数据接收不全
InetAddress.getByName("192.168.1.164"), 12345); //设置接收的IP和端口
ds.send(dp); //发送数据
} catch (SocketException e) {
System.out.println("new DatagramSocket()执行异常");
e.printStackTrace();
}catch (UnknownHostException e) {
System.out.println("new DatagramPacket()执行异常");
e.printStackTrace();
} catch (IOException e) {
System.out.println("ds.send(dp)执行异常");
e.printStackTrace();
}finally{
ds.close(); //关闭socket通道,释放资源
}
}
}
************************************************************************************************
package com.java.DataGamesocket;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
/**
* UDP(用户数据报协议)实例,负责接收数据类
* 测试时,要先运行接收程序,再运行发送程序,否则接收不到数据。
* @author
*
*/
public class UdpResive {
private static DatagramSocket ds;
public static void main(String[] args) {
resive();
}
private static void resive() {
try {
ds = new DatagramSocket(12345); //创建DatagramSocket对象,用于UDP发送或接收数据,指定接收端口
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf , 1024); //创建接收数据包对象,限定最大是1024个字节
ds.receive(dp); //接收数据
String strresive=new String(dp.getData(),0,dp.getLength())+
" from "+dp.getAddress().getHostAddress()+":"+dp.getPort();
System.out.println(strresive);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
ds.close(); //关闭socket通道,释放资源
}
}
public static void send(){
try {
ds = new DatagramSocket(); //创建DatagramSocket对象,用于UDP发送或接收数据
String str = "您好,hello word!";
DatagramPacket dp = new DatagramPacket(str.getBytes(), //创建发送包对象,
str.getBytes().length, //这里最好不要写成str.length,因为如果发送的内容是汉字,一个汉字占用2个字节,接收的时候可能会造成数据接收不全
InetAddress.getByName("192.168.1.164"), 12345); //设置接收的IP和端口
ds.send(dp); //发送数据
} catch (SocketException e) {
System.out.println("new DatagramSocket()执行异常");
e.printStackTrace();
}catch (UnknownHostException e) {
System.out.println("new DatagramPacket()执行异常");
e.printStackTrace();
} catch (IOException e) {
System.out.println("ds.send(dp)执行异常");
e.printStackTrace();
}finally{
ds.close(); //关闭socket通道,释放资源
}
}
}
相关推荐
- **定义:** Socket是一种通信协议,它允许不同计算机之间进行网络通信。在Java中,Socket编程是基于TCP/IP协议栈实现的。 - **作用:** Socket为两台计算机上的进程提供了一种端到端的通信机制。通过Socket,一个...
它支持多种编程语言,包括C/C++、C#、Delphi、易语言、Java和Python。该框架广泛适用于各种应用场景的TCP/UDP/HTTP通信系统,并且对通信层进行了完全封装,使得应用程序无需关注通信层的任何细节。框架的主要特性...
### 基于Java Socket网络编程的关键知识点 #### 一、网络基础——TCP/IP协议 TCP/IP(Transmission Control Protocol/Internet Protocol)协议是互联网最基本的协议之一,它定义了电子设备如何连接到因特网以及...
《深入解析Smart-Socket:基于Java AIO的高效网络通信框架》 Smart-Socket是一款开源的Java异步非阻塞I/O(AIO)框架,它以高效、稳定和易于扩展为特点,广泛应用于高性能、高并发的网络通信场景。在Java的世界里,...
此外,HP-Socket 支持多种编程语言,包括 C/C++、C#、Delphi、E(易语言)、Java 和 Python 等。 **1.2 组件分类** - **服务端组件**:主要用于创建服务器,负责监听端口、接受连接、管理连接状态等。 - **客户端...
PB的优势在于其高效、跨平台和语言无关性,支持C++, Java, Python等多种编程语言。通过定义.proto文件,我们可以声明数据结构,然后使用PB编译器生成相应的类或接口,方便在代码中操作和序列化/反序列化数据。 ...
在整体架构上,HP-Socket定义了一系列组件接口(如ITcpServer、IUdpClient)、组件实现类(如CTcpServer、CUdpClient)以及监听器接口(如ITcpServerListener、IUdpClientListener)。组件接口定义了操作方法,应用...
Socket可以被理解为网络通信中的一个端点,它由IP地址和端口号两部分组成,这个定义来源于最初的TCP规范(RFC 793)。Socket有两种类型:流式Socket(Stream socket)和数据报Socket(Datagram socket)。 1. 流式...
2. **Java Socket编程**:使用java.net.Socket和ServerSocket类,可以构建TCP Socket通信。对于HTTP,可以基于Socket实现自定义的HTTP客户端和服务器。 3. **HTTP over Socket**:有些情况下,为了实现特定的功能或...
- **Android Socket编程**:使用Java的Socket类建立与NTRIP服务器的连接,收发数据。 - **JSON或XML解析**:NTRIP数据可能以这两种格式传输,需要解析成Java对象。 - **Android权限管理**:可能需要获取网络访问权限...
在Mina中,需要定义一个解码类来处理接收到的数据包。这个解码类继承自`CumulativeProtocolDecoder`,重写`decode`方法来解析数据包。 ```java public class ByteArrayCodecFactory extends ...
import java.nio.channels.SocketChannel; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.ByteBuffer; import java.io.RandomAccessFile; import java.io....
使用HikariCP,我们可以定义最大连接数、最小空闲连接数、连接超时时间等参数,然后在需要时通过调用其API获取Socket连接。 以下是一个简单的Socket连接池实现步骤: 1. 初始化连接池:设置最大连接数、最小连接数...
在Java编程中,Socket通信是实现网络应用程序之间通信的基础。Socket是TCP/IP协议的一部分,它提供了进程间的网络通信。在本文中,我们将深入探讨如何在Java中实现客户端和服务器之间的双向Socket通信。 首先,让...
在“netty-socket-master”这个压缩包中,可能包含了服务器端和客户端的代码实现,包括Bootstrap的配置、ChannelHandler的定义、数据传输的逻辑等。通过对这些代码的学习和分析,开发者可以深入理解Netty在Android上...
### Java使用Socket网络编程详解 #### 一、引言 Socket是网络通信的基础,它使得不同计算机间的进程可以通过网络进行通信。本篇文章旨在详细介绍如何在Java中使用Socket进行网络编程,特别是TCP协议下的客户端与...
8. **网络编程**:Java提供Socket编程接口,可以用来编写网络客户端和服务端应用程序,理解TCP/IP和UDP协议的基本概念。 9. **泛型**:泛型引入后,增强了类型安全,减少了强制类型转换,是Java-SE 5.0引入的重要...
在Java中,通常使用`java.net.Socket`类和`java.net.ServerSocket`类来实现客户端和服务器端的通信。服务器端创建一个`ServerSocket`实例监听指定端口,等待客户端的连接;客户端创建`Socket`对象,指定服务器地址和...
- **定义**:Socket通常被称为“套接字”,它是网络通信的一种抽象表示形式,用于描述IP地址和端口号。简单来说,Socket提供了一种在不同计算机之间建立连接的方式。 - **功能**:应用程序通过Socket向网络发送请求...