2020-8-11 第八组 曹雨 网络编程
网络通信
服务器与客户端之间的信息传递的过程
Socket编程
- Socket编程是建立在TCP/IP协议上
- Socket协议通过IP地址 + 端口号的形式可以访问其他主机。
创建服务器对象
关键字:ServerSocket
//创建了一个服务器对象,绑定在8888端口
Socket serverSocket = new ServerSocket(8888);
//服务器在等待客户端发来消息
Socket socket = serverSock.accept();
//可以读取客户端发过来的消息
InputStream inputStream = socket.getInputStream();
//我们需要一个输出流,输出流的作用是给服务器返回数据
OutputStream outputStream = new FileOutputStream("…………(文件名)")
OutputStream clientOutputStream = socket.getOutputStream();
byte [] buffer = new byte[1024 * 1024];
int len;
while((len = inputStream.read(buffer)) != -1){
outputStream.write(buffer,0,len);
}
创建一个客户端
关键字:Socket
//创建一个socket通信的客户端
Socket socket = new Socket();
//第一个参数意思为获取当前电脑的IP地址,第二个参数的意思为服务器的端口号
socket.connect(new InetSocketAddress(InetAddress.getLoopbackAddress(),8888));
//客户端发送数据给服务器
OutputStream outputStream =socket.getOutputStream();
String data = "xxxx";
outputStream.write(data.getBytes());
System.out.println ("客户端已发送数据"+data);
ouputStream.close();
socket.close();
UDP协议
创建服务器
关键字:DatagramSocket
//创建服务器,服务器指定端口号
DatagramSocket socket = new DatagramSocket(9999);
byte [] buffer = new byte[1024];
//接受客户端传输过来的数据
DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
//接受客户端发送来的数据4
socket.receive(packet);
System.out.println(new String(packet.getData(),0,packet.getLength()));
socket.close();
创建客户端
关键字:DatagramSocket
DatagramSocket socket= new DatagramSocket;
String str = "xxx";
byte []byte = str.getBytes();
DatagramPacket packet = new DatagramPacket(data,0,data.length,
InetAddress.getLocalHost(),9999);
//发送数据
socket.send(packet);
System.out.println("数据发送成功");
socket.close();
面试题:
TCP/IP协议和UDP的区别
TCP/IP协议:
- 非常稳定 (送报纸送到你手上,不然不送)
- 效率极低
- 只能一对一传输通信
- 传输面向字节流
UDP协议:
- 非常不稳定(送报纸送到报箱里,不管你收不收的到)
- 效率特别高
- 支持—对一,—对多,多对—和多对多交互通信
- 传输面向报文
架构问题:
C/S架构:
Client/Server客户端/服务器,QQ,360,腾讯会议,游戏
B/S架构:
Browser/Server浏览器/服务器
目前市面上以移动端软件为主,C/S架构。
Java主要做的就是架构中的Server端
获取本机ip地址的方法
- cmd---ipconfig
- 127.0.0.1---本机(个人建议,任何情况都好使)
- localhost---本机(前提条件:你的电脑要联网,激活一下网卡)
报文:
当我们通过浏览器访问我们的ServerSocket,得到了许多我们无法知晓意思的信息
其实他们就是报文。
将浏览器给我们的信息称为请求
请求:客户端--->服务器
响应:服务器--->客户端
一般情况,我们需要向浏览器发出响应。如果我们想做到这一点,我们就需要遵循浏览器的格式要求:
ServerSocket serverSocket = new ServerSocket(8888);
Socket server = serverSocket.accept();
OutputStream outputStream = server.getoutputStream();
//我们按照http协议的格式封装一个报文数据
String reponse = "HTTP/1.1 200 OK\r\n"+
"Content-Length: 39\r\n" +
"Content-Type: text/html;charset=UTF-8\r\n\r\n"+
"<h1>hello server</h1>";
outputStream.write(response.getBytes());
outputStram.flush();
重定向:
重定向,重定向会重定向到新的页面,而且地址栏的地址也会随之变幻。
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器启动成功...");
Socket server = serverSocket.accpet();
OuputStream outputStream = server.getOutpurStream();
String response = "HTTP/1.1 301 Moved TEMPORarily\r\n"+
//当我们从浏览器进入我们这个网页,会被重定向至百度 https://www.baidu.com
"Location: https://www.baidu.com\r\n\r\n";
outputStream.write(response.getByte());
outputStream.flush();
总结:
这一周我们学习了线程,IO流,再加上今天的网络通信。越来越能感觉到理论知识的重要性,丰富的理论知识确实能够帮助快速建立知识体系。对于代码编写也会有很大帮助。这些知识越来越面向实际的开发。如果没有理论知识,面对一个实际的案例,可能会无从下手
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】