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流,再加上今天的网络通信。越来越能感觉到理论知识的重要性,丰富的理论知识确实能够帮助快速建立知识体系。对于代码编写也会有很大帮助。这些知识越来越面向实际的开发。如果没有理论知识,面对一个实际的案例,可能会无从下手

posted on   figh466  阅读(16)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示