`

JAVA网络通讯总结一

    博客分类:
  • java
阅读更多
一.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只支持前两种。
分享到:
评论

相关推荐

    java网络编程http通信

    通过java网络编程深入理解http非阻塞通信和阻塞通信,以及http协议在网络中的应用 源码包每一行都有注释,在代码里面每一个类都有详细的注释来解释这个类的功能这个方法的功能,调用哪一个类的哪一个功能等等。 压缩...

    java 面试题 总结

    Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...

    java面试题目与技巧1

    │ │ 经验总结.txt │ │ 资料目录.txt │ │ 题目.txt │ │ │ ├─HTML Pages │ │ │ Desktop_.ini │ │ │ Low Level Security in Java.htm │ │ │ SCJP 1_4 认证的初级教程.htm │ │ │ 新建 文本文档....

    N学Java资深研发工程师1期81G

    16-网络通讯与IO(二).mp4 18-网络通讯与IO(四).mp4 23-SpringSecurity系统权限组件.mp4 25-企业级SSM框架设计与实战(一).mp4 26-企业级SSM框架设计与实战(二).mp4 27-企业级SSM框架设计与实战(三).mp4 28-...

    JAVA基础课程讲义

    JAVA网络编程 190 InetAddress 190 InetSocketAddress 191 URL类 191 基于TCP协议的SOCKET编程和通信 193 UDP通讯的实现 201 思考作业 203 上机作业(分组完成,3人一组,周末完成) 204 第十一章 JAVA多媒体编程 ...

    java面试题及技巧4

    │ │ 经验总结.txt │ │ 资料目录.txt │ │ 题目.txt │ │ │ ├─HTML Pages │ │ │ Desktop_.ini │ │ │ Low Level Security in Java.htm │ │ │ SCJP 1_4 认证的初级教程.htm │ │ │ 新建 文本文档....

    JAVA 五年的工作经验和学习笔记

    这里需要说明的时,该文档是本人5年工作经验的积累,文档中大部分知识点来源于实际工作中的总结,(除了JAR等资源文件外)其代码都是可运行的,还有一部分知识来源于网络或者其他书籍,这里做一些收集,使该体系更加...

    2019java亲生经历面试题答案解析准备.zip

    Java程序员面试宝典1-120题 Java程序员面试笔试宝典-何昊.pdf Java面试宝典.pdf 5.Nosql Redis Jedis常用命令 6.互联网系统垂直架构之Session解决方案 7.分布式框架Zookeeper之服务注册与订阅 8.高性能网络编程必备...

    java面试题以及技巧

    │ │ 经验总结.txt │ │ 资料目录.txt │ │ 题目.txt │ │ │ ├─HTML Pages │ │ │ Desktop_.ini │ │ │ Low Level Security in Java.htm │ │ │ SCJP 1_4 认证的初级教程.htm │ │ │ 新建 文本文档....

    javaOA系统源码 java项目

    1、通知发布:通知发布采用office在线编辑器,良好的可视环境,可插入附件、图片,图文混排。立即发布即刻显示在系统首页,支持点击统计。发布后,可自由管理,修改与删除。 2、短消息系统:本oa系统根据各部门与...

    收藏 Java c++通过des加密的结果不一样【已解决】

    Java c++通过des加密的结果不一样【已解决】 最近做了一个接口,需要和C++进行通讯,通讯的参数采用des加密,但调试的时候却发现同样的明文和密钥加密出来的结果却是不一样的。 收藏网络总结代码

    搜索链接Java网络爬虫(蜘蛛)源码-zhizhu

    利用java.url中的类实现Spider程序与外界通讯,以及处理网页中的URL连接,对蜘蛛程序的核心类(通讯核心、蜘蛛程序工作核心),资源索引的建立与搜索新型了详细的研究。 通过设计分析,完成了自己的蜘蛛爬行程序。...

    Java聊天室的设计与实现socket 设计软件源码+WORD毕业论文文档.zip

    当今社会,能够实现即时通讯的软件使用频率是十分恐怖的,网络聊天室作为它的一种,使用人数也是相当可观的。国内处于垄断的QQ,业界老大哥微软的MSN都是大众关注和使用的焦点,普通老百姓也能够拥有属于自己的...

    JAVA 学习/工作 笔记

    这里需要说明的时,该文档是本人5年工作经验的积累,文档中大部分知识点来源于实际工作中的总结,(除了JAR等资源文件外)其代码都是可运行的,还有一部分知识来源于网络或者其他书籍,这里做一些收集,使该体系更加...

    java面试题及技巧3

    │ │ 经验总结.txt │ │ 资料目录.txt │ │ 题目.txt │ │ │ ├─HTML Pages │ │ │ Desktop_.ini │ │ │ Low Level Security in Java.htm │ │ │ SCJP 1_4 认证的初级教程.htm │ │ │ 新建 文本文档....

    java面试题以及技巧6

    │ │ 经验总结.txt │ │ 资料目录.txt │ │ 题目.txt │ │ │ ├─HTML Pages │ │ │ Desktop_.ini │ │ │ Low Level Security in Java.htm │ │ │ SCJP 1_4 认证的初级教程.htm │ │ │ 新建 文本文档....

    蚂蚁课堂(每特学院)第一期-Java高端培训视频教程

    0007--Java网络编程之socket.zip ├─0008--Maven.zip ├─0009--Web开发入门.zip ├─0010--深入理解Servlet.zip ├─0011--Session与Cokile实现原理.zip ├─0012--深入理解Http协议.zip ├─0013--Mybatis.zip ├...

    基于Java和android的外卖APP设计.doc

    使用的通讯协议:TCP/IP协议 3 软件接口 操作系统:Windows 7 数据库:SQL Server2005 集成的商业组件:eclipse 3.7 Tomcat 7.0 AndroidSDK 4 系统功能需求 经过需求采集和需求分析,确定关键需求,本系统应该具有的...

    基于JAVA文件传输(论文分析+系统源代码)

    我们本次制作的软件就是以飞鸽传书为参照,具体功能也是飞鸽传书的基础上,通过分析与对比,总结其他此类软件的优缺点,制作出一款有自己特色的内网传输软件。主要特点要突出在,方便快速,实用性强,功能适应于广大

Global site tag (gtag.js) - Google Analytics