InetAdress:
1.public static InetAdress getBytes(String host):获取主机ip地址的封装对象;
2.public String getHostName():返回主机名;
3.public String getHostAdress():获取ip地址;
端口:
物理端口:
网卡口;
逻辑端口:
1.每个网络程序都有至少一个逻辑端口;
2.用于表示进程的逻辑地址,不同进程的标识;
3.有效端口:0-65535,其中0-1024为系统使用或保留端口;
协议:
通信的规则:
UDP:不需要建立连接,不可靠协议,速度快,有数据限制;
TCP:建立连接通道,数据无限制,速度慢,可靠;
Socket:
网络套接字;
Socket编程:网络编程,套接字编程;
Socket编程包含了ip地址和端口;
原理机制:
通信两端都要有Socket;
网络通信就是Socket之间的通信;
数据再两个Socket之间通过IO传输;
UDP发送数据:
1.创建发送端Socket对象;
DatagramSocket s=new DatagramSocket();
2.创建数据,并把数据打包;
byte[] bys="你好".getBytes();
DatagramPacket dp=new DatagramPacket(bys,bys.length,InetAdress.getByname("127.0.0.1"),10086);
3.调用Socket对象发送方法发送数据;
s.send(dp);
4.释放资源;
s.close();
UDP接收数据:
1.创建接收端Socket对象(指定端口);
DatagramSocket ds=new DatagramSocket(10086);
2.创建数据包;
byte[] bys=new byte[1024];
DatagramPacket dp=new DatagramPacket(bys,bys.length);
3.接收数据;
ds.receive(dp);
4.解析并输出;
byte[] bys2=dp.getData();
sout(new String(bys2,0,dp.getlength));
5.释放资源:
ds.close();
TCP:
TCP发送数据:
1.创建发送端的Socket对象;
Socket s=new Socket("127.0.0.1",10086);
2.获取输出流,写数据;
OutputStream os=s.getOutputStream();
os.write("你好".getBytes());
3.释放资源;
s.close();
TCP接收数据:
1.创建接收端Socket对象;
ServerSocket ss=new ServerSocket(10086);
2.监听客户端链接,返回一个对应的Socket对象;
Socket s=ss.accept();
3.获取输入流读取数据并输出;
InputStream is=s.getInputStream();
byte[] bys=new byte[1024];
int len;
while((len=is.read)!=-1){
sout(new String(bys,0,len));
}
4.释放资源;
ss.close();
s.close();
注意事项:
1.先开服务器端,再开客户端;
2.read和readLine是阻塞方法,如果服务器端想要在读取数据后给用户端反馈,用户端需要执行shutdownOutput()方法以读取反馈,否则会一直阻塞;