您的位置:首页 > 编程语言 > Java开发

java初级笔记_Socket

2015-07-11 02:11 232 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!
-------

一、Socket相关概念

A:计算机网络与网络编程

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

网络编程就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。

B:网络模型

计算机网络之间以何种规则进行通信,就是网络模型研究问题。

网络模型一般是指

OSI(Open System Interconnection开放系统互连)参考模型

TCP/IP参考模型

两种主要的网络模型

C:网络三要素

IP地址:网络中设备的标识,不易记忆,可用主机名。

端口号:用于标识进程的逻辑地址,不同进程的标识。

传输协议:通讯的规则,常见协议:TCP,UDP。

1、IP地址

要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机,在TCP/IP协议中,这个标识号就是IP地址。

IP地址简介:

A:所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。按照TCP/IP规定,IP地址用
二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。例如一个采用二进制形式的IP
地址是“00001010000000000000000000000001”,这么长的地址,人们处理起来也太费劲了。为了
方便人们的使用,IP地址经常被写成十进制的形式,中间使用符号“.”分开不同的字节。于是,上面的
IP地址可以表示为“10.0.0.1”。IP地址的这种表示法叫做“点分十进制表示法”,这显然比1和0容易记忆
得多。

B:IP地址的组成

IP地址 = 网络号码+主机地址

A类IP地址:第一段号码为网络号码,剩下的三段号码为本地计算机的号码

B类IP地址:前二段号码为网络号码,剩下的二段号码为本地计算机的号码

C类IP地址:前三段号码为网络号码,剩下的一段号码为本地计算机的号码

特殊地址:

127.0.0.1 回环地址,可用于测试本机的网络是否有问题. ping 127.0.0.1

DOS命令 ipconfig:查看本机IP地址

xxx.xxx.xxx.0 网络地址

xxx.xxx.xxx.255 广播地址

A类 1.0.0.1---127.255.255.254
(1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在
局域网络中的地址) (2)127.X.X.X是保留地址,用做循环测试用的。

B类 128.0.0.1---191.255.255.254
172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留
地址。

C类 192.0.0.1---223.255.255.254
192.168.X.X是私有地址

D类 224.0.0.1---239.255.255.254

E类 240.0.0.1---247.255.255.254

2、端口号

物理端口 网卡口

逻辑端口 我们指的就是逻辑端口

每个网络程序都会至少有一个逻辑端口

用于标识进程的逻辑地址,不同进程的标识

有效端口:0~65535,其中0~1024系统使用或保留端口

通过360可以查看端口号

3、协议

UDP:

将数据源和目的封装到数据包中,不需要建立连接;每个数据报的大小在限制在64k;因无连接,是
不可靠协议;不需要建立连接,速度快。

TCP:

建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协
议;必须建立连接,效率会稍低。

D:Socket

在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,
并绑定到一个端口上,不同的端口对应于不同的服务。

Socket就是为网络编程提供的一种机制,又叫套接字编程。

通信的两端都有Socket。

网络通信其实就是Socket间的通信。

数据在两个Socket间通过IO传输。

二、具体类介绍

A:InetAddress类

是对IP地址的抽象

无构造方法

主要方法

public static InetAddress getLocalHost() throws UnknownHostException 获取本地主机

public static InetAddress getByName(String host) throws UnknownHostException 依据主机名获取主机

public String getHostName()

public String getHostAddress()

B:UDP网络编程操作

DatagramSocket数据套接字与DatagramPacket数据包

完成步骤:

建立发送端,接收端。

创建数据

建立数据包。

调用Socket的发送接收方法。

关闭Socket。

发送端与接收端是两个独立的运行程序。

UDP发送端固定格式代码:

UDP接收端固定格式代码:

C:TCP网络编程操作

Socket客户端和ServerSocket服务器端

完成步骤:

建立客户端和服务器端。

建立连接后,通过Socket中的IO流(Socket流)进行数据的传输。

(如果是服务器端,则需要添加一步操作:通过Socket服务获取Sokect再获取其当中的IO流)

关闭socket。

同样,客户端与服务器端是两个独立的应用程序。

注意:

服务器端开启后等待客户端访问,不应关闭。

一个服务器端对应多个客户端。

不同客户端间通信可以通过服务器端中转信息。

TCP服务器端固定格式代码

TCP客户端固定格式代码

其他方法及注意事项:

客户端连接上服务端,两端都在等待,没有任何数据传输。

通过例程分析:因为read方法或者readLine方法是阻塞式。

解决办法:

自定义结束标记

使用shutdownInput,shutdownOutput方法。

------<a
href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: