今天学习了网络编程,很有意思,因为写代码再也不是一个人玩了,可以跟同桌甚至是全班的人一起玩,实现数据传输,上午跟同桌,把案例改吧改吧,增强了点,能跟同桌一句一句的通话了,晚上又把源拓展的上传日志案例改了一下,可以实现多文件的传输了,总体来说还是很有收获的!
网络编程
一、概述
网络TCP/IP协议层次结构
a:链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。
b:网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。
c:传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。
d:应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。
IP地址:IPV4和IPV6
0.0.0.0 ----->255.255.255.255
32位 (2进制,10进制)
0000 : 0000 : 0000 : 0000 : 0000 : 0000 : 0000 : 0000
FFFF : FFFF : FFFF : FFFF : FFFF : FFFF : FFFF : FFFF
128位(2进制,16进制)
IPV4:最大主机数 2的32次方 -1;并不是所有的地址都会被分配,人均入网设备变多,随着社会发展,已不能满足,IPv4地址正在耗尽,而IPv6通过更长的序列提供了更多的IP地址。IPv4向IPv6的迁移正在发生
IPV6:最大主机数 2的128次方 - 1;
InetAddress :该类用于封装一个IP地址,并提供了一系列与IP地址相关的方法
a:static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。
b:static InetAddress getLocalHost() 返回本地主机。
c:String getHostAddress() 返回 IP 地址字符串(以文本表现形式)。
d: String getHostName() 获取此 IP 地址的主机名。
二、网络编程数据传输(传输层)
A:UDP
无连接,效率高,安全性低
B:TCP
面向连接,效率低,安全性高
Client:
//创建客户端对象
Socket s = new Socket("127.0.0.1", 10086);
//创建流对象
FileInputStream fis = new FileInputStream("a.txt");
OutputStream os = s.getOutputStream();
//读写
int len;
byte[] bys = new byte[1024];
while((len=fis.read(bys)) !=-1){
os.write(bys, 0, len);
}
//写完后,跟服务器结束标记
s.shutdownOutput();
fis.close();
//读取服务器回执消息
InputStream is = s.getInputStream();
byte[] bbs = new byte[1024];
int len2 = is.read(bbs);
System.out.println(new String(bbs,0,len2));
s.close();
Serive:
ServerSocket ss = new ServerSocket(10086);
while(true){
final Socket s = ss.accept();
//多线程
new Thread(){
public void run() {
try {
//流对象
InputStream is = s.getInputStream();
FileOutputStream fos = new FileOutputStream("b"+System.currentTimeMillis()+".txt");
//接收,写
int len;
byte[] bys = new byte[1024];
while((len=is.read(bys)) != -1){
fos.write(bys, 0, len);
}
fos.close();
//上传成功
OutputStream os = s.getOutputStream();
os.write("上传成功".getBytes());
s.close();
} catch (IOException e) {
System.out.println("网络繁忙,请稍后再试!");
e.printStackTrace();
}
};
}.start();
}
|
|