Java网络编程(二)

1.Socket和ServerSocket类

(1)套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。当连接建立时,服务器会创建一个Socket对象。客户端和服务器现在可以通过对Socket对象的写入和读取来进行进行通信。java.net.Socket类代表一个套接字,并且java.net.ServerSocket类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。以下步骤在两台计算机之间使用套接字建立TCP连接时会出现:

  • 服务器实例化一个ServerSocket对象,表示通过服务器上的端口通信。
  • 服务器调用 ServerSocket类 的accept()方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。
  • 服务器正在等待时,一个客户端实例化一个Socket对象,指定服务器名称和端口号来请求连接。
  • Socket类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个Socket对象能够与服务器进行通信。
  • 在服务器端,accept()方法返回服务器上一个新的socket引用,该socket连接到客户端的socket。

连接建立后,通过使用I/O流在进行通信。每一个socket都有一个输出流和一个输入流。客户端的输出流连接到服务器端的输入流,而客户端的输入流连接到服务器端的输出流。

(2)

Socket 类的方法

java.net.Socket类代表客户端和服务器都用来互相沟通的套接字。客户端要获取一个Socket对象通过实例化 ,而 服务器获得一个Socket对象则通过accept()方法的返回值。

Socket类有五个构造方法.

2.DatagramSocket类和DatagramSocket类

(1)java中通过两个类来实现UDP协议顶层的数据报:DatagramPacket对象是数据容器,DatagramSocket是用来发送和接受DatagramPacket的套接字。采用UDP通信机制下,在发送信息时,首先要将数据打包,然后将打包好的数据包发送目的地。在接收信息时,首先接收别人发来的数据报,然后查看数据报中的内容。

(2)DatagramPacket类

要发送或接收数据报,需要用DatagramPacket类将数据打包,即用DatagramPacket类创建一个对象,称为数据包。

重要的构造方法:

DatagramPacket(byte[] buf,int length)   构造数据包对象,用来接收长度为length的数据包

DatagramPacket(byte[] buf,int length,InetAddress address,int port)  构造数据包,用来将length长度的数据包发送到指定主机上的指定端口号

DatagramPacket(byte[] buf,int offset,int length)

DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port)

DatagramPacket(byte[] buf,int offset,int length,SocketAddress address)

DatagramPacket(byte[] buf,int length,SocketAddress address)

常用方法:

InetAddress getAddress()   返回某台机器的IP地址,此数据报是将要发往该主机或是从该主机接收到的

byte[] getData()    返回数据缓冲区

int getLength()    返回将要发送或是接收的数据包的数据长度

SocketAddress getSocketAddress() 获取要将此包发送到的或是发出此数据报的远程主机的SocketAddress(通常为IP地址+端口号)

void setAddress(InetAddress iaddr) 设置要将此数据报发往的那台机器的IP地址

void setData(byte[] buf)  为此包设置数据缓冲区

DatagramSocket类

DatagramSocket类是用来发送和接收数据包的套接字,负责将打包的数据包发送到目的地,或是从目的地接收数据包

重要的构造方法

DatagramSocket(int port)   创建数据报套接字并将其绑定到本地主机上的指定的端口

常用方法

void receive(DatagramPacket p)  从此套接字接收数据报包

void send(DatagramPacket p)  从此套接字发送数据包

(3)代码实现

//将“你好”封装成数据包,发送到目的主机“www.baidu.com”,端口号为2016上
byte buff[] = "你好".getByte();
InetAddress destAddress = InetAddress.getByName("www.baidu.com");
DatagramPacket dataPacket = new DatagramPacket(buff,buff.length,destAddress,2016);
DatagramSocket sendSocket = new DatagramSocket();
sendSocket.send(dataPacket);  

//接收外界发送到本机2016号端口的数据包
byte buff[] = new byte[8192];
DatagramPacket receivePacket = new DatagramPacket(buff,buff.length);
DatagramSocket receiveSocket = new DatagramSocket(2016);
receiveSocket.receive(receivePacket);
int length = receivePacket.getLength();
String message = new String(receivePacket.getData(),0,length);
System.out.println(message);
时间: 2024-10-14 14:21:47

Java网络编程(二)的相关文章

Java网络编程二:Socket详解

Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点. 一.使用Socket进行网络通信的过程 服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接请求. 客户端:客户端程序根据你服务器所在的主机名和端口号发出连接请求. 两者之间的通信是通过Socket完成的,我们可以认为Socket是两个城市之间的交通工具,有了它,就可以在两个城市之间穿梭了. Socket通信示例 主机A的应用程序和主机B的应用程序通信,必须通过Socket建立连接,而建立

Java 网络编程(二)

以下例开始本文的内容: 例1,需求:上传图片. 客户端: 服务端点. 读取客户端已有的图片数据. 通过socket输出流将数据发给服务端. 读取服务端反馈信息. 关闭. class PicClient { public static void main(String[] args) throws IOException { /* * 一系列判断 */ if(args.length != 1) { System.out.println("请选择一个jpg格式的图片"); return;

Java学习笔记—第十二章 Java网络编程入门

第十二章  Java网络编程入门 Java提供的三大类网络功能: (1)URL和URLConnection:三大类中最高级的一种,通过URL网络资源表达方式,可以很容易确定网络上数据的位置.利用URL的表示和建立,Java程序可以直接读入网络上所放的数据,或把自己的数据传送到网络的另一端. (2)Socket:又称"套接字",用于描述IP地址和端口(在Internet中,网络中的每台主机都有一个唯一的IP地址,而每台主机又通过提供多个不同端口来提供多种服务).在客户/服务器网络中,当客

如何使用socket进行java网络编程(二)

通过在如何使用socket进行java网络编程(一)中程序的编写,可以总结出一些常用的java socket编程的范例来. ServerSocket server = new ServerSocket(_PORT_); while (true) { Socket nextClient = server.accept(); SocketHandler handler = new SocketHandler(nextClient); Thread t = new Thread(handler); t

java网络编程socket解析

转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在C/S通信模式中,client需要主动创建于server连接的Socket(套接字).服务器端收到了客户端的连接请求,也会创建与客户连接的Socket.Socket可看做是通信两端的收发器.server与client都通过Socket来收发数据. 1.构造Socket 1.Socket() 2.So

第13篇-JAVA 网络编程

第13篇-JAVA 网络编程 每篇一句 比我强大的人都在努力我还有什么理由不拼命 初学心得 不去追逐你所渴求你将永远不会拥有 (笔者JEEP/711)[JAVA笔记 | 时间:2017-04-22| JAVA 网络编程 ] 1.网络编程基本概念 1.什么是计算机网络 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备通过通信线路连接起来在网络操作系统网络管理软件及网络通讯协议的管理和协调下实现资源共享和信息传递的计算机系统 把分布在不同地理区域的计算机与专门的外部设备用通讯线路互

Java网络编程【Socket服务端和客户端】

Socket 编程大家都不陌生,Java 学习中必学的部分,也是 Java网络编程核心内容之一.Java 网络编程又包括 TCP.UDP,URL 等模块.TCP 对应 Socket模块,UDP 对应 DatagramPacket 模块.URL 对应 URL 模块.其中 TCP 和 UDP 是网络传输协议,TCP 是数据流传输协议,UDP 是数据包传输协议.两者之间的异同就不在这里说了,推荐一本入门书籍 <TCPIP入门经典>.我们开始 Socket 服务端和客户端编程吧. 一.Socket 服

Java网络编程基础

一.Java网络编程 网络编程在如今这样的网络时代是十分重要的,Java语言提供了丰富的类库来支持网络编程.这里将重点介绍Java.net中的类,充分了解认识Java网络编程的原理并深入学习各模块.在学习Java网络编程之前首先需要具备一定的网络知识:网络的层次结构,常见的网络协议(TCP/IP),IP地址端口号等等.需要学习了解这些内容,可以参考前面的文章. 二.主机地址和IP地址 在进行网络访问时,每个主机都有IP地址,也有主机名(域名),为了便于处理与之相关的问题,Java.net包中提供

java 网络编程复习(转)

好久没有看过Java网络编程了,现在刚好公司有机会接触,顺便的拾起以前的东西 参照原博客:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 一.网络编程  通过使用套接字来达到进程间通信目的的编程就是网络编程. 二.网络编程中常见的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定I

Java 网络编程学习总结

新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1]    网络编程认识                [2]  TCP/IP编程小例子 [3]   UDP编程小例子 [4]  简单线程池实例 一.网络编程的主要认识 Java是一种基于网络设计的语言,用于开发网络软件特别便利. 它对于网络的操作都是基于IP层以上的,也就是对TCP/UDP进行操作,所以java的网络编程又称为Socket编程. 一种是TCP/IP 网络编程,