网络通信编程一
计算机网络定义:
1.将多台计算机通过通信线路互相连接,使他们可以数据交换,共享资源,协同工作
2.计算机网络 由计算机、设备硬件、协议、服务组成一个 局域网 、广域网、互联网
网络协议:
1.设计网络通信中规则 以及标准还有服务
2.数据格式、传输数据的效率、传输控制
OSI七层模型和TCP/IP五层模型:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MjxYVy6X-1678285631604)(C:\Users\宙长\AppData\Roaming\Typora\typora-user-images\image-20230308220510202.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Irldygr-1678285631605)(C:\Users\宙长\AppData\Roaming\Typora\typora-user-images\image-20230308220613838.png)]
通信编程基础:
套接字:内存中的对象 保存好与对象建立连接的相关信息 ip 端口号
首先启动监听Socket:
1.监听在本机某个端口是否有socket来连接 ,与Serversocket不同
2.如果有Socket连接则创建对应的Socket对象
3.存在一对Socket对象,通过从Socket对象上获取到传输IO流进行数据传输
A端
//准备一个ServerSocket监听程序 不参与数据传输
ServerSocket sc=new ServerSocket(58888);
System.out.println("ServerSocket 初始化完成"+sc.getInetAddress());
System.out.println("正在监听中");
//启动监听
//当监听到有socket 来连接 建立一个对应的socket 与其建立连接 返回自己创建的Socket对象
Socket A=sc.accept();
System.out.println("监听到一个连接:"+A.getInetAddress());
System.out.println(A.getPort());
B端(尝试连接A)
Socket B=new Socket("127.0.0.1",58888);
System.out.println("B开始连接"+B.getLocalPort());
使用IO传输数据
InputStream:输入流 对方向本方输入
OutputStream:输出流 本方向对方输出
如下方所示,两方各有对应的IO
I--------O
O--------I
//A给对方发送消息
OutputStream os =A.getOutputStream();
//os.write(500);//0-255
int num=65535000;
int b1=(num>>24)&0xFF;
int b2=(num>>16)&0xFF;
int b3=(num>>8)&0xFF;
int b4=(num>>0)&0xFF;
os.write(b1);
os.write(b2);
os.write(b3);
os.write(b4);
os.flush();//刷新 强制立即发送
System.out.println("发送:"+b1+"-"+b2+"-"+b3+"-"+b4);
//发送文字
String msg="你好世界";
for (int i = 0; i < msg.length(); i++) {
char c=msg.charAt(i);
int c1=(c>>8)&0xFF;
int c2=(c>>0)&0xFF;
os.write(c1);
os.write(c2);
}
os.flush();
//收尾,关闭进程占用的资源
os.close();
A.close();
发送大型数字时将其分解成八位二进制数,发送字符一个字符两个字节同理分解成两个八位,接收时再用或运算合并成发送的数据。
如1010 1001 0011 0011-》1010 1001 和0011 0011 1010 1001 0000 0000 |0000 0000 0011 0011 =1010 1001 0011 0011
//B接受所连接对象的消息
InputStream ins =B.getInputStream();
int b1=ins.read();
int b2=ins.read();
int b3=ins.read();
int b4=ins.read();
int msg=b1<<24|b2<<16|b3<<8|b4;
System.out.println("收到:"+msg);
for (int i=0;i<4;i++){
int c1=ins.read();
int c2=ins.read();
int c=c1<<8|c2;
System.out.print((char)c);
}