- 浏览: 27165 次
- 性别:
- 来自: 深圳
文章分类
最新评论
一.TCP/UDP Sockets
1.TCP需要四个方面的数据:
本地iP,本地应用程序使用的TCP端口,远程IP地址,远程系统响应TCP端口
2.TCP客户端和服务器端操作步骤:
(1)客户端:建立客户端socket连接==》得到socket的读写流==》操作数据流==》关闭数据流==》关闭socket
(2)服务器端:建立一个服务器端并开始监听==》使用accept方法获取新的连接==》建立输入输出流==》在已有回话的协议上产生回话==》关闭客户端数据流和socket==》关闭服务器socket
注意:BIO 方式使得整个处理过程和连接是绑定的,只要连接建立,无论客户端是否有消息发送,都要进行等待处理,一定程度上浪费了服务器端的硬件资源.
NIO 方式的支持是通过Channel 和Selector 方式来实现,采用的方法为向Channel注册感兴趣的事件,然后通过Selector 来获取到发生了事件的key,如发生了相应的事件,则进行相应的处理,否则则不做任何处.所以NIO效率比BIO效率高
例子:
客户端: public static void main(String[] args) throws Exception{
//1.建立与服务器端的连接
String host="127.0.0.1";
int port=9527;
Socket socket=new Socket(host,port);
//2.读取服务器端返回的流。
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//3.获取输出流,从而将数据输出到指定地 址和端口的服务器。
PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
BufferedReader systemIn=new BufferedReader(new InputStreamReader(System.in));
boolean flag=true;
while(flag)
{
String command=systemIn.readLine();
if(command==null ||
"quit".equalsIgnoreCase(command.trim())){
flag=false;
System.out.println("Client quit!");
out.println("quit");
out.close();
in.close();
socket.close();
continue;
}
out.println(command);
String response=in.readLine();
System.out.println(response);
}
}
服务端:public static void main(String[] args) throws Exception{
//1.指定服务器端口建立监听
int port=9527;
ServerSocket ss=new ServerSocket(port);
System.out.println("Server listen on port: "+port);
//2.ss.accept() 阻塞式的等待客户端的连接,当有客户
//端的连接请求进入时,此方法才返回Socket 对象
Socket socket=ss.accept();
//3.获取接收的消息流,进行处理
BufferedReader in=new BufferedReader(new
InputStreamReader(socket.getInputStream()));
//4.获取输出流对象,从而写入数据返回给客户端。
PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
while(true)
{
//声明写入变量
String line=in.readLine();
if(line==null)
{
Thread.sleep(100);
continue;
}
if("quit".equalsIgnoreCase(line.trim()))
{
in.close();
out.close();
ss.close();
System.out.println("Server has been shutdown!");
System.exit(0);
}
else{
System.out.println("Message from client: "+ line);
out.println("Server response:"+line);
Thread.sleep(100);
}
}
}
(3)一些关键类的理解
InetAddress类:表示一个Internet主机地址
Socket类:实现客户端的socket
ServerSocket类:实现服务器的socket,等待从网络到达的请求,基于这些请求完成操作,返回相应的结果给请求者。
3.UDP发送端和接收端操作步骤:
(1)UDP发送端:初始化DatagramSocket 对象==>初始化DatagramPacket 对象,并绑定此数据所需发送的目标地址==>通过DatagramSocket 发送DatagramPacket 对象到指定的目标地址。
(2)UDP接收端:初始化DatagramSocket 对象,并指定在某个端口上监听数据==》初始化DatagramPacket 对象,并指定所需接收的数据的大小==》//3.从监听的端口上获取所收到的数据
例子:
发送端:public static void main(String[] args) throws Exception{
int port=9527;
int aport=9528;
//1.初始化DatagramSocket 对象
DatagramSocket serverSocket=new DatagramSocket(aport);
//2.初始化DatagramPacket 对象,并绑定此数据所需发送的目标地址
byte[] buffer=new byte[65507];
DatagramPacket receivePacket=new DatagramPacket(buffer,buffer.length);
//3.声明发送DatagramPacket
DatagramSocket socket=new DatagramSocket();
//获取本地服务器名
InetAddress server=InetAddress.getByName("localhost");
BufferedReader systemIn=new BufferedReader(new InputStreamReader(System.in));
boolean flag=true;
while(flag)
{
String command=systemIn.readLine();
//通过DatagramSocket 发送DatagramPacket 对象到指定的目标地址。
byte[] datas=command.getBytes("UTF-8");
DatagramPacket packet=new DatagramPacket(datas,datas.length,server,port);
socket.send(packet);
if(command==null ||"quit".equalsIgnoreCase(command.trim()))
{
flag=false;
System.out.println("Client quit!");
socket.close();
continue;
}
serverSocket.receive(receivePacket);
String receiveResponse=new
String(receivePacket.getData(),0,receivePacket.getLength(),"UTF-8");
System.out.println(receiveResponse);
}
}
接收端:public static void main(String[] args) throws Exception{
int port=9527;
int aport=9528;
//1.初始化DatagramSocket 对象,并指定在某个端口上监听数据。
DatagramSocket server=new DatagramSocket(port);
DatagramSocket client=new DatagramSocket();
//获取本地服务器名
InetAddress serverAddress=InetAddress.getByName("localhost");
//2.初始化DatagramPacket 对象,并指定所需接收的数据的大小。
byte[] buffer=new byte[65507];
DatagramPacket packet=new DatagramPacket(buffer,buffer.length);
while(true)
{
//3.从监听的端口上获取所收到的数据。
server.receive(packet);
String line=new
String(packet.getData(),0,packet.getLength(),"UTF-8");
if("quit".equalsIgnoreCase(line.trim()))
{
server.close();
System.exit(0);
}else
{
System.out.println("Message from client: "+ line);
packet.setLength(buffer.length);
String response="Server response:"+line;
byte[] datas=response.getBytes("UTF-8");
DatagramPacket responsePacket=new DatagramPacket(datas,datas.length,serverAddress,aport);
client.send(responsePacket);
Thread.sleep(100);
}
}
}
4.TCP和UDP的区别:
(1)TCP/IP是一种可靠的网络数据传输协议,UDP/IP是一种不保证数据一定到达的网络传输协议。
(2)TCP/IP没有UDP/IP性能好。
在网络IO操作上有3中方式:BIO,NIO,AIO;java只支持前两种。
1.TCP需要四个方面的数据:
本地iP,本地应用程序使用的TCP端口,远程IP地址,远程系统响应TCP端口
2.TCP客户端和服务器端操作步骤:
(1)客户端:建立客户端socket连接==》得到socket的读写流==》操作数据流==》关闭数据流==》关闭socket
(2)服务器端:建立一个服务器端并开始监听==》使用accept方法获取新的连接==》建立输入输出流==》在已有回话的协议上产生回话==》关闭客户端数据流和socket==》关闭服务器socket
注意:BIO 方式使得整个处理过程和连接是绑定的,只要连接建立,无论客户端是否有消息发送,都要进行等待处理,一定程度上浪费了服务器端的硬件资源.
NIO 方式的支持是通过Channel 和Selector 方式来实现,采用的方法为向Channel注册感兴趣的事件,然后通过Selector 来获取到发生了事件的key,如发生了相应的事件,则进行相应的处理,否则则不做任何处.所以NIO效率比BIO效率高
例子:
客户端: public static void main(String[] args) throws Exception{
//1.建立与服务器端的连接
String host="127.0.0.1";
int port=9527;
Socket socket=new Socket(host,port);
//2.读取服务器端返回的流。
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//3.获取输出流,从而将数据输出到指定地 址和端口的服务器。
PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
BufferedReader systemIn=new BufferedReader(new InputStreamReader(System.in));
boolean flag=true;
while(flag)
{
String command=systemIn.readLine();
if(command==null ||
"quit".equalsIgnoreCase(command.trim())){
flag=false;
System.out.println("Client quit!");
out.println("quit");
out.close();
in.close();
socket.close();
continue;
}
out.println(command);
String response=in.readLine();
System.out.println(response);
}
}
服务端:public static void main(String[] args) throws Exception{
//1.指定服务器端口建立监听
int port=9527;
ServerSocket ss=new ServerSocket(port);
System.out.println("Server listen on port: "+port);
//2.ss.accept() 阻塞式的等待客户端的连接,当有客户
//端的连接请求进入时,此方法才返回Socket 对象
Socket socket=ss.accept();
//3.获取接收的消息流,进行处理
BufferedReader in=new BufferedReader(new
InputStreamReader(socket.getInputStream()));
//4.获取输出流对象,从而写入数据返回给客户端。
PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
while(true)
{
//声明写入变量
String line=in.readLine();
if(line==null)
{
Thread.sleep(100);
continue;
}
if("quit".equalsIgnoreCase(line.trim()))
{
in.close();
out.close();
ss.close();
System.out.println("Server has been shutdown!");
System.exit(0);
}
else{
System.out.println("Message from client: "+ line);
out.println("Server response:"+line);
Thread.sleep(100);
}
}
}
(3)一些关键类的理解
InetAddress类:表示一个Internet主机地址
Socket类:实现客户端的socket
ServerSocket类:实现服务器的socket,等待从网络到达的请求,基于这些请求完成操作,返回相应的结果给请求者。
3.UDP发送端和接收端操作步骤:
(1)UDP发送端:初始化DatagramSocket 对象==>初始化DatagramPacket 对象,并绑定此数据所需发送的目标地址==>通过DatagramSocket 发送DatagramPacket 对象到指定的目标地址。
(2)UDP接收端:初始化DatagramSocket 对象,并指定在某个端口上监听数据==》初始化DatagramPacket 对象,并指定所需接收的数据的大小==》//3.从监听的端口上获取所收到的数据
例子:
发送端:public static void main(String[] args) throws Exception{
int port=9527;
int aport=9528;
//1.初始化DatagramSocket 对象
DatagramSocket serverSocket=new DatagramSocket(aport);
//2.初始化DatagramPacket 对象,并绑定此数据所需发送的目标地址
byte[] buffer=new byte[65507];
DatagramPacket receivePacket=new DatagramPacket(buffer,buffer.length);
//3.声明发送DatagramPacket
DatagramSocket socket=new DatagramSocket();
//获取本地服务器名
InetAddress server=InetAddress.getByName("localhost");
BufferedReader systemIn=new BufferedReader(new InputStreamReader(System.in));
boolean flag=true;
while(flag)
{
String command=systemIn.readLine();
//通过DatagramSocket 发送DatagramPacket 对象到指定的目标地址。
byte[] datas=command.getBytes("UTF-8");
DatagramPacket packet=new DatagramPacket(datas,datas.length,server,port);
socket.send(packet);
if(command==null ||"quit".equalsIgnoreCase(command.trim()))
{
flag=false;
System.out.println("Client quit!");
socket.close();
continue;
}
serverSocket.receive(receivePacket);
String receiveResponse=new
String(receivePacket.getData(),0,receivePacket.getLength(),"UTF-8");
System.out.println(receiveResponse);
}
}
接收端:public static void main(String[] args) throws Exception{
int port=9527;
int aport=9528;
//1.初始化DatagramSocket 对象,并指定在某个端口上监听数据。
DatagramSocket server=new DatagramSocket(port);
DatagramSocket client=new DatagramSocket();
//获取本地服务器名
InetAddress serverAddress=InetAddress.getByName("localhost");
//2.初始化DatagramPacket 对象,并指定所需接收的数据的大小。
byte[] buffer=new byte[65507];
DatagramPacket packet=new DatagramPacket(buffer,buffer.length);
while(true)
{
//3.从监听的端口上获取所收到的数据。
server.receive(packet);
String line=new
String(packet.getData(),0,packet.getLength(),"UTF-8");
if("quit".equalsIgnoreCase(line.trim()))
{
server.close();
System.exit(0);
}else
{
System.out.println("Message from client: "+ line);
packet.setLength(buffer.length);
String response="Server response:"+line;
byte[] datas=response.getBytes("UTF-8");
DatagramPacket responsePacket=new DatagramPacket(datas,datas.length,serverAddress,aport);
client.send(responsePacket);
Thread.sleep(100);
}
}
}
4.TCP和UDP的区别:
(1)TCP/IP是一种可靠的网络数据传输协议,UDP/IP是一种不保证数据一定到达的网络传输协议。
(2)TCP/IP没有UDP/IP性能好。
在网络IO操作上有3中方式:BIO,NIO,AIO;java只支持前两种。
发表评论
-
jackJson
2015-05-31 22:19 987在Java平台(StAX, JAXB等)XML处理质量和多 ... -
java网站大全
2015-05-09 23:02 575http://scjp.home.sohu.com/ 模拟试 ... -
my of java网站
2015-05-09 22:48 608MAVEN JAR大全 http://maven.out ... -
jvm性能优化(转载)
2015-04-12 20:05 481JVM内存模型优点 内置基于内存的并发模型: ... -
CGLib动态代理原理及实现
2014-04-02 14:51 511JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口 ... -
gjson应用
2014-04-02 14:52 11001.简单的处理 list 和 map Java 代码 1. G ... -
java基础知识总结(一)
2013-04-01 11:30 704一.java基础: 1.java内 ... -
JVM参数调优
2013-03-22 16:54 638JVM参数的含义 实例见实 ... -
list,Object数据转换成json数据
2013-03-18 15:58 852//list转换成json数组 public static ... -
Properties读写文件的操作
2013-03-18 15:01 716Properties读文件 public void readB ... -
获取classpath之外资源路径的方法
2013-02-18 16:19 779// web工程根路径 private static fin ... -
自定义注解
2013-02-18 16:10 404@Retention(RetentionPolicy.RUNT ...
相关推荐
在本项目中,我们主要探讨的是如何利用Java技术来设计并实现一个网络通讯系统。Java是一种广泛应用于网络编程的语言,其跨平台性、强大的...对于想要深入理解和实践Java网络通讯技术的开发者,这是一个极好的学习资源。
总结,基于Java的网络通讯系统设计与实现涉及到多个层次的知识,包括Java网络API的使用、并发处理、协议理解和实现、异常处理以及安全性保障。通过学习和实践这些知识点,开发者可以构建出功能强大、高效的网络应用...
通过java网络编程深入理解http非阻塞通信和阻塞通信,以及http协议在网络中的应用 源码包每一行都有注释,在代码里面每一个类都有详细的注释来解释这个类的功能这个方法的功能,调用哪一个类的哪一个功能等等。 压缩...
总结,大华JAVA网络类通用SDK以其全面的功能和易用的开发工具,为网络设备的二次开发提供了强大的支持。开发者借助这个SDK,可以轻松实现对网络设备的控制和管理,构建出满足多样化需求的智能应用。随着物联网技术的...
Java Socket 编程是Java语言中用于网络编程的主要技术之一。它允许开发者创建网络应用程序,通过Socket实现客户机/服务器结构的通信。在Java中,Socket编程主要是基于TCP/IP协议的网络编程。 网络编程的两个主要...
总结,Qt与Java之间的Socket通信涉及了网络编程、JSON序列化和反序列化、多线程处理(特别是在Java中处理并发连接时)、以及错误处理等多个技术点。理解并熟练掌握这些知识点,可以构建可靠的跨平台通信系统。
总结起来,Java与Modbus通讯交互涉及到的主要知识点包括:Modbus协议的基础知识,RTU和TCP的区别,如何使用Java第三方库(如modbus4j)进行通信,以及如何构建和解析Modbus请求和响应。在实际项目中,理解这些概念并...
这篇论文详细介绍了如何利用Java虚拟机的特性构建一个能够在不同操作系统上运行的校内教学网络通讯软件。 1. 背景与现状 在当今信息化时代,教学活动越来越依赖网络。特别是在需要上机实践的课程中,局域网内的...
1. **Socket通信**:Socket是网络编程中的基础组件,它提供了一种进程间通信(IPC)的方式,允许不同计算机上的进程进行数据交换。Java中的`java.net.Socket`类和`ServerSocket`类用于实现客户端和服务端的通信。...
### JAVA SOCKET通讯程序知识点 #### 一、Java Socket编程简介 在Java中,Socket编程是一种常用的网络通信方式,它允许程序之间通过TCP/IP协议进行数据交换。Java中的`java.net.Socket`类和`java.net.ServerSocket...
在这个实战教程中,我们将深入探讨如何使用Java编程语言和Smack库来创建一个即时通讯应用程序。Smack是一个流行的开源库,专门设计用于处理XMPP协议,该协议广泛应用于即时通讯和在线状态服务。 1. **项目概述** -...
### JAVA源码基于JAVA的网络通讯系统设计与实现(论文+系统) #### 一、引言 随着互联网技术的快速发展,网络通信系统已经成为现代社会不可或缺的一部分。无论是个人还是企业,都需要高效可靠的网络通信服务来支持...
在本项目中,"基于JAVA的网络通讯系统设计与实现(论文+系统)"是一个全面探讨如何使用Java语言构建网络通信系统的实践性研究。这个压缩包包含了一个完整的论文和实际的系统实现,提供了从理论到实践的深入学习机会...
Java网络编程的核心在于能够通过网络协议与其他计算机进行通讯。其中,最常用的协议包括TCP/IP协议和UDP协议。这两种协议都有其独特的特性和应用场景: - **TCP/IP(Transmission Control Protocol/Internet ...
1. **Java网络编程基础**:Java提供了丰富的API来支持网络编程,如Socket、ServerSocket、DatagramSocket和DatagramPacket等类。这些类用于创建TCP/IP或UDP连接,进行数据传输。 2. **Socket编程**:Java中的Socket...
Java蓝牙无线通讯技术API是Java ME(Micro Edition)平台的一部分,主要用于移动设备和嵌入式系统的通信。在本文中,我们将深入探讨如何使用Java API来实现蓝牙设备间的无线通信,包括连接、数据交换以及管理蓝牙...
- **面向客户/服务器模型**:网络上的两个程序通过一个双向的通讯连接实现数据的交换。这种双向链路的一端称为Socket。客户程序可以通过Socket写入请求,服务器端则通过Socket接收请求并返回响应。 **2.2 Socket...
总结,Java Socket在即时通讯服务器开发中扮演了基础的角色,涉及到网络编程、多线程、并发处理、协议设计等多个方面。理解并熟练运用这些技术,能够构建高效、稳定的即时通讯服务。而文件"ImWebServer"可能包含了...
总结,Java即时通讯系统结合了Java的网络编程能力和TCP/IP协议的可靠性,构建了一个适用于局域网环境的高效通信平台。通过不断优化和扩展,这类系统能够满足日益增长的企业内部沟通需求,提升工作效率,同时也为个人...