网络编程

71 阅读4分钟

www.liaoxuefeng.com/wiki/125259… 摘抄地址

Java程序使用synchronized关键字对一个对象进行加锁,synchronized保证了代码块在任意时刻最多只有一个线程能执行

synchronized:同时化;【物】同步;【影视】声;使同时 网络:同步的;同步化;同步方法

synchronized(lock) {

n = n + 1;

}

网络编程是Java最擅长的方向之一,使用Java进行网络编程时,由虚拟机实现了底层复杂的网络协议,Java程序只需要调用Java标准库提供的接口,就可以简单高效地编写网络程序。

网络编程基础 计算机网络是指2台及以上的计算机组成的网络, 在同一个网络中,任意2台计算机都可以直接通信,因为所有计算机都需要遵循同一种协议。 什么是互联网?互联网是网络的网,即把所有计算机网络连接在一起,形成一个全球统一的互联网。

对于某特定的计算机来说,他可能使用网络协议ABC, 而另一个计算机可能使用网络协议xyz. 如果计算机网络各自的通讯协议不统一,就没法把不同的网络连接起来形成互联网。因为,为了把计算机网络接入互联网,就必须使用TCP/IP协议。

TCP/IP协议泛指网络协议,其中最重要的两个协议是TCP协议和IP协议。

只有使用TCP/IP协议的计算机才能够来连入互联网,使用其他网络协议(如AppleTalk NetBIOS协议等—) 是无法联入互联网的。 非同一网络号的,它们之间必须通过路由器或者交换机这样的网络设备间接通信,我们把这种设备称为网关。

域名

计ip地址非常困难,通过域名访问某个特定的服务。域名解析器DNS负责把域名翻译成对应的IP, 客户端根据IP地址访问服务器。 TCP协议也是应用最广泛的协议,许多高级协议都是建立在TCP协议之上的,例如HTTP、SMTP等。

Socket、TCP和部分IP的功能都是由操作系统提供的,不同的编程语言只是提供了对操作系统调用的简单的封装。例如,Java提供的几个Socket相关的类就封装了操作系统提供的接口。

为什么需要Socket进行网络通信?因为仅仅通过IP地址进行通信是不够的,同一台计算机同一时间会运行多个网络应用程序,例如浏览器、QQ、邮件客户端等。当操作系统接收到一个数据包的时候,如果只有IP地址,它没法判断应该发给哪个应用程序,所以,操作系统抽象出Socket接口,每个应用程序需要各自对应到不同的Socket,数据包才能根据Socket正确地发到对应的应用程序。

一个Socket就是由IP地址和端口号(范围是0~65535)组成,可以把Socket简单理解为IP地址加端口号。端口号总是由操作系统分配,它是一个0~65535之间的数字,其中,小于1024的端口属于特权端口,需要管理员权限,大于1024的端口可以由任意用户的应用程序打开。

使用Socket进行网络编程时,本质上就是两个进程之间的网络通信。其中一个进程必须充当服务器端,它会主动监听某个指定的端口,另一个进程必须充当客户端,它必须主动连接服务器的IP地址和指定端口,如果连接成功,服务器端和客户端就成功地建立了一个TCP连接,双方后续就可以随时发送和接收数据。

因此,当Socket连接成功地在服务器端和客户端之间建立后:

对服务器端来说,它的Socket是指定的IP地址和指定的端口号; 对客户端来说,它的Socket是它所在计算机的IP地址和一个由操作系统分配的随机端口号。