哎,最近浪费了好多的时间...总之,从现在开始两个方向:
1. javaEE 将来去淘宝工作啊
2. android 移动互联网是大势所趋,没错的
网络编程
1. OSI(open system interconnection) 开放系统互连参考模型
1层物理层: 主要定义物理设备标准,如网线的接口类型、光纤的接口类型
各种传输介质的传输速率等。它的主要作用是传输比特流(由1、0
转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是
我们常说的数模转换和模数转换)。这一层的数据叫做比特。
2层数据链路层: 主要将从物理层接收到的数据进行MAC地址(网卡的地址)的封装和
解封装。常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据
通过交换机来传输。
3层网络层: 主要将从下层接收到的数据进行IP地址(例如192.168.0.1)的封装和解封装。
在这一层工作的设备是路由器,常把这一层的数据叫做数据包
4层传输层: 定义了一些传输数据的协议和端口号(www端口80等),如TCP,UDP
主要是将下层接收的数据进行分段和传输,到达目的地址后再进行重组
常把这一层数据叫做段
5层会话层: 通过传输层(端口号:传输端口和接收端口)建立数据传输的通路。主要在
你的系统之间发起会话或者接受会话请求(设备之间需要画像认识可以是IP,
也可以是MAC或者是主机名)
6层表示层: 主要是进行对接收的数据进行解释、加密和解密、压缩与解压缩等(也就是把
计算机能够识别的东西转换成人能够识别的东西(如图片、声音等))。
7层应用层: 主要是一些终端的应用,可以理解成我们在电脑屏幕上看到的东西
2. 网络通讯3要素
IP地址 -- 网络中设备的标识,本地环回地址:127.0.0.1 主机名:localhost
端口号 -- 用于表示进程的逻辑地址,不同进程的标识,每个网络程序都会至少有一个逻辑端口
0~65535,其中0~1024为系统使用或保留端口
协议 -- TCP UDP
3. Socket
用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,
同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务
数据其实是在socket间通过IO流进行传输
4. UDP协议发送数据步骤(发送端):
1)创建发送端的socket对象 DatagramSocket ds = new DatagramSocket();
2)造数据 byte[] buf = "hello,udp,我来了".getBytes();
InetAddress address = InetAddress.getByName("10.13.21.172");
3)把数据打包 DatagramPacket dp = new DatagramPacket(buf, buf.length, address, 12306);
4)发送数据 ds.send(dp);
5)释放资源 ds.close();
UDP协议接受数据步骤(接收端):
1)创建接收端socket对象 DatagramSocket ds = new DatagramSocket(12306);
2)造一个空数据包 byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys, bys.length);
3)接收数据 ds.receive(dp);
4)解析数据并显示 InetAddress address = dp.getAddress();
String ip = address.getHostAddress();
byte[] bys2 = dp.getData();
int length = dp.getLength();
String s = new String(bys2, 0, length);
System.out.println("ip:" + ip + " data " + s);
5)释放资源 ds.close();
5. TCP协议服务器操作步骤(服务器端):
1)创建服务器Socket对象,并指定端口 ServerSocket ss = new ServerSocket(8888);
2)监听客户端对象的连接(建立连接通道) Socket s = ss.accept();
3)获取输入流,读取数据并反馈 InputStream is = s.getInputStream();
byte[] bys = new byte[1024];
int len = is.read(bys);
String server = new String(bys,0,len);
//给出反馈
OutputStream os = s.getOutputStream();
os.write("数据已收到".getBytes());
4)释放资源
s.close();
ss.close();
TCP协议发送数据步骤(客户端):
1)创建TCP协议发送端Socket对象,指定服务器ip和端口(隐含了通道的建立)
Socket s = new Socket("10.13.21.172",12345);
2)获取输出流,写数据
OutputStream os = s.getOutputStream();
os.write("hello,tcp".getBytes());
3)释放资源
os.close();
注意:TCP协议一定要先运行服务器
6. 客户端程序存在的问题-->通道对象如何判断输入结束
while ((line = br.readLine()) != null ) { //这里可能有问题 这里是通道,不是之前的文件对象
if ("over".equals(line)) {
break;
}
bw.write(line);
bw.newLine();
bw.flush();
}
socket.shutdownOutput(); //通知服务器,我结束了