网络编程
网络: 由多台计算机通过连接设备,组成的计算机群称为网络。
通信协议: 像交通一样有交通安全协议,网络中也有这样的协议。
常见的通信协议:
- TCP/IP协议
- UDP协议
- 其他协议
TCP/IP协议:
上图中的四层分别是tcp/ip中四层:应用层,传输层,网络层,链路层。
- 应用层:主要负责程序的协议,HTTP(超文本传输协议),FTP(文件传输协议),DNS(域名服务,用于将名称解析为ip)。
- 传输层:主要负责传输数据,分为可靠传输(TCP),以及不可靠传输(UDP);其中TCP是远距离可靠传输,常用于跨距离传输;UDP为短距离不可靠传输,常用于无线设备,如无线耳机等。
- 网络层:负责两台计算机的位置定义连接,IP(网络间互联的协议)为每个计算机的专属标记位置,ICMP(用于计算机与路由器间互访的协议),IGMP(互联网组管理协议)。
- 链路层:负责网络中的连接线路,常见的连接设备有光纤等;驱动是用软件驱使硬件进行操作。
IP地址与端口号:
- IP:每一台计算机的逻辑标识符。
- 端口号:用来区分计算机中的不同程序(有0-65535)。
- 总结:当一台计算机向另外台计算机发送消息时,先找到IP再找到端口号,然后进行传输。
客户端与服务器访问:
TCP通信: 在JDK中提供了两个类用于实现TCP程序,一个是Socket类,用于表示客户端,另一个是ServerSocket类,用于表示服务器端。通信时,首先创建代表服务器端的ServerSocket对象,该对象相当于开启一个服务,并等待客户端的连接,然后创建代表客户端的Socket对象向服务器端发出连接请求,服务器端响应请求,两者建立连接开始通信。
例子:
public class TcpServer{//服务器端
public static void main(String args[]) throw Exception
{
ServerSocket serversocket=new ServerSocket(8080);//建立连接端口为8080
Socket socket=serversocket.accept();//Socket点接收
InputStream is=socket.getInputStream();//获取输入流
OutputStream os=socket.getOutputStream();//获取输出流
byte[] bt=new byte[1024];//创建一个1024字节长度的字节
int length=is.read(bt);//将输入流中数据读入到bt里面中
System.out.println(new String(bt,0,length));
os.write("ok".getByte());
os.close();
is.close();
socket.close();
}
}
------------------------------------------------------------------
public class Tcpclient{
public void main(String args[]) throw Exception
{
Socket socket=new Socket("127.0.0.0",8080);
InputStream is=socket.getInputStream();//获取输入流
OutputStream os=socket.getOutputStream();//获取输出流
os.write("yes".getByte());
byte[] byt=new byte[200];
int length=is.read(byt);
System.out.println(new String(byt,0,length));
os.close();
is.close();
socket.close();
}
}
注意:InetAddress为ip地址。