java网络编程

一、TCP/UDP,Socket,Http,Ftp简介

1、TCP/IP是个协议组(主要解决数据如何在网络中传输),可分为三个层次:网络层、传输层和应用层:

     网络层:IP协议(支持网间互联的数据报协议)

     传输层:TCP协议、UDP协议

     应用层:FTP协议、HTTP协议等

2、TCP协议:当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据,TCP提供超时重发功能,TCP一旦建立连接,客户端和服务端任何一方主动关闭连接前,TCP连接都将保持下去。TCP最大的优点是可靠,一般网页、邮件、远程连接传输就用TCP.

    TCP连接的三次握手:发送数据前需要建立连接,这个连接就是“三次握手”,握手完了才可以开始发送数据。第一次连接:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个syn包(syn=k),即syn+ack包,此时服务器进入syn_recv状态;第三次握手:客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLESHED状态,即完成三次握手。

    3、UDP协议:UDP是一个无连接的简单的面向数据报的传输层协议,UDP不提供可靠性,只是把应用程序传给IP层的数据报发送出去,并不保证他们能到达目的地,UDP不用在客户端和服务器间建立连接,故而传输速度快。一般语音广播,视频,QQ等传输就用UDP.

    4、Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是实现传输层协议的一种API,Socket可以支持不同的传输层协议,可以是TCP,也可以是UDP,当使用TCP协议建立连接时,该Socket连接就是一个TCP连接。通常情况下建立TCP连接,Socket连接一旦建立通信双方就可以互相发送消息,直到连接断开。Socket连接步骤:服务器监听,客户端请求,连接确认。

    5、Http协议,即超文本传输协议,是客户端浏览器与web服务器之间的应用层通信协议,web服务器上存储的都是超文本信息,客户端通过http协议传输所要访问的超文本信息,服务器通过http将超文本信息提取出来呈现给客户端。Http连接是建立在请求/响应模型上的,首先需要客户端建立一条与服务器端的TCP连接(不使用UDP连接是因为TCP协议提供传输控制,按顺序组织数据和错误纠正等功能),然后客户端发送一个请求到服务器,服务器才能回复数据。在请求结束后会主动释放TCP连接,从建立连接到释放连接称为“一次连接”。

   6、FTP协议:文件传输协议是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和Internet上最早使用的协议之一,属于网络协议的应用层。FTP客户机可以给服务器发出命令来下载文件,上传文件,创建或改变服务器上的目录。

二、Java网络编程

   1、InetAddress类代表IP地址,InetAddress类下还有 两个子类:Inet4Address、Inet6Address,分别代表IPV4地址和IPV6地址。

InetAddress ia = InetAddress.getLocalHost();//得到本机  

  IP对象

ia.getHostAddress();//得到IP地址

ia.getHostName();//获得此IP地址的主机名

ia.getCanonicalHostName();//获得此IP地址的全限定域名

byte[] bs = ia.getAddress();//得到的IP存进数组

System.out.println(Arrays.toString(bs));//打印出来的值会有负数,超过127,最高位会变为1,所以会打印出负数

InetAddress ia1 = InetAddress.getByAddress(bs);//根据原始IP地址获取对应InetAddress对象

InetAddress ia2 =      //根据主机获取对应InetAddress对象

InetAddress.getByName("WIN-2TTIKAESLV6");

2、基于TCP协议的网络编程:

ServerSocket和Socket:ServerSocket类用于监听来自客户端的Socket连接,如果没有连接,将会一直处于等待状态。

accept();//如果接收到一个客户端Socket的连接请求,该方法将返回一个与客户端Socket对应的Socket;否则该方法将一直处于等待状态,线程也被阻塞。

ServerSocket(int port);//构造方法,用指定端口创建一个ServerSocket,没有指定IP地址,则该ServerSocket将会绑定到本机默认的IP地址。客户端连接时需指定与此相同的端口号。

示例代码:

服务器端

 181839_nsMR_2896911.png

客户端

 181904_421K_2896911.png

socket.getInputStream();//返回该Socket对象对应的输入流,让程序通过该输入流从Socket中取出数据

socket.getOutputStream();//得到socket的输出流,程序将输出信息保存到socket中返回给客户端

实际生活中客户端和服务器端需要不断地进行通信,所以为了不阻碍线程,应该使用多线程。示例代码如下:

服务器端:

181941_AT5k_2896911.png

客户端:

 181959_6DuP_2896911.png

182009_NYTP_2896911.png

3.基于UDP协议的网络编程:

UDP协议是一种不靠谱的协议,他在通信实例两端各建立一个Socket,但这两个Socket之间并没有连接,这两个Socket只是发送、接收数据报的对象,Java提供DatagramSocket对象作为基于UDP协议的Socket,使用DatagramPacket类包装一条要发送的消息,之后使用DatagramSocket类完成信息的发送、接收操作,使用DatagramSocket发送消息时并不能指定消息到底发往何处,而是由DatagramPacket包装消息时指定消息发往的目的地。示例代码如下:

客户端:

182024_fdeS_2896911.png 

服务器端:

182035_ORiv_2896911.png 

由上程序可知:接收数据之前应该采用的DatagramPacket构造器有:DatagramPacket(byte[] buf, int length);

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

发送数据之前应该采用的DatagramPacket构造器有:DatagramPacket(byte[] buf, int length,InetAddress addr,int port);

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

DatagramSocket.receive(DatagramPacket p);//从该DatagramSocket中接收数据

DatagramSocket.send(DatagramPacket p);//向外发送数据

4、URL、URLConnection、URLDecoder和URLEncoder

  URLDecoder和URLEncoder类用于转换字符串,示例代码如下:

182053_qSRi_2896911.png 

URL:url.openStream()会返回一个读取该URL资源的InputStream流,之后就可将网址上的内容以流的方式输入进来。如下代码所示:

 182133_9luh_2896911.png

URLConnection:通过这个类可以建立与远程服务器的连接,检查远程资源的一些属性,如下代码所示:

182120_yEaA_2896911.png 

                               ---------------这些博客都是我之前在学习过程中自书中摘出的重点,以及一些前辈总结的经验,外加一些自己的感悟,如果有前辈看到,有不对的地方希望大家指出,非常感谢。

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/qinqinyuan/blog/743270

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值