1、什么是计算机网络:
把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件。软件、数据信息等资源。
2、计算机进行通讯的条件:IP地址。协议。端口号。
3、IP地址;计算机的唯一标识。
4、协议:计算机网络实现通信必须有一些约定即通信协议,对速率、传输代码、代码结构、传输控制步骤,出错控制等制定标准。
TCP,UDP协议:
TCP:用于在不可靠的因特网上提供可靠的,端到端的字节流通信的协议。它是一种面向连接的协议,TCP连接是字节流而非报文流。
UDP协议:向应用程序提供一种发送封装的原始ip数据报的方法,并且发送时无需建立连接,是一种不可靠的连接。
5、端口:区分一台主机的多个不同应用程序,端口号范围为0-65535,其中0-1023位为系统保留,系统会随时占用。
IP地址+端口就组成了所谓的socket,socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础。
6、通信协议分层思想。
由于结点之间联系很复杂,在指定协议时,把复杂成分分解为一些简单的成分,再将它们复合起来,最常用的复合方式,是层次方式,即同层间可以通信,上一层可以调用下一层,而与再下一层不发生关系,各层互不影响,利于系统的开发和扩展。
7、TCP和UDP协议时位于同一层,都是建立在IP层的基础之上。由于计算机有唯一标识(IP地址),故可以互相通话了,通话分为TCP,和UDP,TCP是可靠的连接,TCP就像打电话,需要先打通对方电话,等待对方有回应后才会跟对方继续说话,也就是一定要确认可以发信息以后才会把信息发出去。TCP上传任何东西都是可靠的,只要两台机器上建立起了连接,在本机上发送的数据就一定能传到对方的机器上,TCP建立连接过程中,会建立三次握手,三次都不成功,才会确认连接为失败。
UDP就好比发电报,发出去就完事了,对方有没有接收到它都不管,所以UDP是不可靠的。TCP传送数据虽然可靠,但传送得比较慢,UDP传送数据不可靠,但是传送得快。
8、Socket 套接字:
网络上具有唯一标识的IP地址和端口组合在一起才能构成唯一能识别的标识符套接字。
Socket原理机制:通信两端都必须要有Socket.
9、Java中的网络支持
针对网络通信的不同层次,Java提供了不同的API,其提供的网络功能有四大类:
InetAddress:用于标识网络上的硬件资源,主要是IP地址
URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据
Sockets:使用TCP协议实现的网络通信Socket相关的类
Datagram:使用UDP协议,将数据保存在用户数据报中,通过网络进行通信。
10、socket编程使用实例:
public class TalkServer {
/**
* @description :
* @date 2016-12-21
* @author lc
* @param args
*
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket server = new ServerSocket(6666);
Socket socket = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream());
BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));
while(true){
String str = in.readLine();
System.out.println(str);
//服务器端发送
String inputstr = wt.readLine();
out.println("server say:"+inputstr);
out.flush();
if(str.equals("end")){
break;
}
}
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客户端程序
public class TalkClient {
/**
* @description :
* @date 2016-12-21
* @author lc
* @param args
*
*
*/
public static void main(String[] args) {
try {
//实例化socket 通过地址和端口,客户端端口必须是服务器端口一致
Socket socket = new Socket("127.0.0.1",6666);
//获取输入流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//获取输出流
PrintWriter pw = new PrintWriter(socket.getOutputStream());
//控制台输入流
BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));
while (true) {
//获取控制台输入内容
String str = wt.readLine();
pw.println(str);
pw.flush();
if (str.equals("end")) {
break;
}
System.out.println(in.readLine());
}
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}