首页 > 编程语言 >网络编程

网络编程

时间:2023-04-21 11:44:56浏览次数:27  
标签:String 编程 网络 close new byte public socket

网络编程

通信的要素

  1. ip

  2. 端口号

规则:网络通信的协议

获取本地IP

再这个类下InetAddress

public static void main(String[] args) throws UnknownHostException {
       InetAddress byName1 = InetAddress.getByName("127.0.0.1");
       System.out.println(byName1);

       InetAddress byName3 = InetAddress.getLocalHost();
       System.out.println(byName3);

       InetAddress byName2 = InetAddress.getByName("www.baidu.com");
       System.out.println(byName2);

  }

端口

端口表示计算机一个程序的进程。

不同的进程有不同的端口号,用来区分软件。

有TCP、UDP端口,每个都有65535个

端口分类:公有端口0~1023

HTTP:80

HTTPS:443

FTP:21

Tomcat:8080

MySQL:3306

Oracle:1521

通信协议

TCP/UDP协议簇

两个重要协议:TCP:用户传输协议

UDP:用户数据报协议

TCU PDP对比

TCP:打电话

需要连接、稳定

三次握手、四次挥手

三次握手
   A:在吗?
   B:在的
   A:你是个好人
       
       
四次分手
   A:我要走了
   B:你真的要走了吗
   B:你真的真的要走了吗
   A:我真的真的要走了

客户端、服务端

传输完成、释放连接、效率低

UDP:发短信

不需要连接、不稳定

不管对方有没有准备好都进行发送

TCP实现文件传输

//客户端,发送文件
public class TcpClientDemo {
   public static void main(String[] args) throws Exception{
       //创建连接
       Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9999);
       //创建一个输出流
       OutputStream os = socket.getOutputStream();
       //读取文件
       FileInputStream fis = new FileInputStream(new File("header.png"));
       //写出文件
       byte[] buffer = new byte[1024];
       int len;
       while ((len=fis.read(buffer)) != -1){
           os.write(buffer,0,len);
      }
       //关闭资源
       fis.close();
       os.close();
       socket.close();
  }
}
//服务端
public class TcpServerDemo {
   public static void main(String[] args) throws Exception {
       //创建服务
       ServerSocket serverSocket = new ServerSocket(9999);
       //监听客户端连接
       Socket socket = serverSocket.accept();//阻塞监听,一直等待客户端连接
       //获取输入流
       InputStream is = socket.getInputStream();
       //文件传输
       FileOutputStream fos = new FileOutputStream(new File("haha.png"));
       byte[] buffer = new byte[1024];
       int len;
       while ((len = is.read(buffer)) != -1) {
           fos.write(buffer,0,len);
      }
       //关闭资源
       fos.close();
       is.close();
       socket.close();
       serverSocket.close();

  }
}

UDP实现简单的聊天功能

public class UdpReceiveDemo {
   public static void main(String[] args) throws Exception {
       DatagramSocket socket = new DatagramSocket(6666);

       while (true) {
           byte[] container = new byte[10];
           DatagramPacket packet = new DatagramPacket(container,0,container.length);
           socket.receive(packet);
           byte[] data = packet.getData();
           String s = new String(data, 0, data.length);
           System.out.println(s);

           if(s.equals("bye")){
               break;
          }
      }
       socket.close();
  }
}
public class UdpSenderDemo {
   public static void main(String[] args) throws Exception {
       DatagramSocket socket = new DatagramSocket(8888);

       //从控制台读取数据
       BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

       while (true){
           String data = reader.readLine();
           byte[] bytes = data.getBytes();
           DatagramPacket localhost = new DatagramPacket(bytes, 0, bytes.length, new InetSocketAddress("localhost",6666));
           socket.send(localhost);
           if (data.equals("bye")){
               break;
          }
      }
       socket.close();
  }
}

多线程实现聊天

public class TalkSend implements Runnable {

   DatagramSocket socket = null;
   BufferedReader reader = null;

   private int fromPort;
   private String toIp;
   private int toPort;

   public TalkSend(int fromPort, String toIp, int toPort) {
       this.fromPort = fromPort;
       this.toIp = toIp;
       this.toPort = toPort;

       try {
           socket = new DatagramSocket(fromPort);
           //从控制台读取数据
           reader = new BufferedReader(new InputStreamReader(System.in));
      }catch (Exception e){
           e.printStackTrace();
      }

  }

   @Override
   public void run() {
       while (true){
           try {
               String data = reader.readLine();
               byte[] bytes = data.getBytes();
               DatagramPacket localhost = new DatagramPacket(bytes, 0, bytes.length, new InetSocketAddress(this.toIp, this.toPort));
               socket.send(localhost);
               if (data.equals("bye")){
                   break;
              }
          } catch (Exception e) {
               e.printStackTrace();
          }
      }
       socket.close();
  }
}
public class TalkReceive implements Runnable {

   DatagramSocket socket = null;
   private int port;
   private String msgFrom;

   public TalkReceive(int port,String msgFrom) {
       this.port = port;
       this.msgFrom = msgFrom;
       try {
           socket = new DatagramSocket(port);
      } catch (Exception e) {
           e.printStackTrace();
      }
  }
   @Override
   public void run() {
       while (true) {
           try {
               byte[] container = new byte[10];
               DatagramPacket packet = new DatagramPacket(container,0,container.length);
               socket.receive(packet);
               byte[] data = packet.getData();
               String s = new String(data, 0, data.length);
               System.out.println(msgFrom + ":" + s);

               if(s.equals("bye")){
                   break;
              }
          }catch (Exception e){
               e.printStackTrace();
          }
      }
       socket.close();
  }
}
public class TalkStudent {
public static void main(String[] args) {
//开启线程
new Thread(new TalkSend(7777,"localhost",9999)).start();
new Thread(new TalkReceive(8888,"老师")).start();
}
}
public class TalkTeacker {
public static void main(String[] args) {
//开启线程
new Thread(new TalkSend(5555,"localhost",8888)).start();
new Thread(new TalkReceive(9999,"学生")).start();
}
}

通过URL进行下载

public class UrlDown {
public static void main(String[] args) throws Exception{
//下载地址
URL url = new URL("https://m801.music.126.net/20230421115728/0fde0139eb4e53bad5e12dfa1ba164c2/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/17232400523/d00f/506f/f6ea/208a2d3445b710176338c131d631002b.m4a");
//连接到资源
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

InputStream inputStream = urlConnection.getInputStream();
FileOutputStream stream = new FileOutputStream("td.m4a");

byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1){
stream.write(buffer,0,len);
}
stream.close();
inputStream.close();
urlConnection.disconnect();
}
}
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:String,编程,网络,close,new,byte,public,socket
From: https://www.cnblogs.com/aseed/p/17339845.html

相关文章

  • Socks5代理与HTTP代理:基本概念、工作原理和在网络应用中的应用
      在互联网上,代理服务器是一种非常重要的技术手段,可以实现许多网络应用的高效和安全运行。Socks5代理和HTTP代理是两种常见的代理服务器类型,它们在网络应用中都有着重要的作用。本文将介绍Socks5代理和HTTP代理的基本概念、工作原理以及在网络应用中的应用。第一部分:Socks5代理......
  • shell/bash脚本编程
    原文地址zhuanlan.zhihu.comshell/bash脚本编程残枫cps​目录收起介绍我们的第一个脚本脚本解释器用户输入测试条件判断迭代语句-循环参数传递退出状态码逻辑操作符函数函数参数传递通配符调试原文地址zhuanlan.zhihu.com原文链接对于我自己来说,学习新框架或技术......
  • 常用网络协议神图
    本图来自网络-------------------------------......
  • 网络基础汇总
     主要覆盖:网络基础、TCP/UDP高频面试题、HTTP协议、Cookis/session、滑动窗口机制等知识点。 目录网络分层基础0.1OSI七层模型与TCP五层模型0.2五层模型vs网络协议有哪些?0.3什么是面向有连接vs面向无连接?0.4UDP和TCP的区别是什么?0.5TCP对应的应用层......
  • 网络流的C++代码实现与过程讲解
    网络流是一种非常重要的图论算法,它在许多实际问题中得到广泛应用。本文将介绍网络流算法的C++代码实现与过程讲解。算法概述网络流算法是通过将图中的边看作流量通道,将图的点看作流量的起点或终点,来求解图中的最大或最小流量的问题。它是一种非常重要的最优化算法,广泛应用于图论......
  • CS144 计算机网络 Lab1:Stream Reassembler
    前言上一篇博客中我们完成了Lab0,使用双端队列实现了一个字节流类ByteStream,可以向字节流中写入数据并按写入顺序读出数据。由于网络环境的变化,发送端滑动窗口内的数据包到达接收端时可能失序,所以接收端收到数据之后不能直接写入ByteStream中,而是应该缓存下来并按照序号重组成......
  • Hibernate 教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用J......
  • PHP 教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介PHP开发入门教程-一个简单而简短的PHP教程和所有内置PHP函数的完整参考手册。本教程是为初学者和高级开发人员设计的。您将了解PHP内置函数,预定义变量示例,面向对象的PHP,数字,标量,数组,散列文件I/O,IF,ELSEIF,执行,循环,运算符,正则表达式,GET,POST,子程序,编码标准,模块,文件管理,套......
  • 编程打卡:C语言趣味编程习题做
    编程打卡:C语言趣味编程习题做求车速问题描述已知一个对称数里程数,2小时之后它又变成了一个对称数,求速度。设计思路很明显看出来95859的下一个对称数是95959,再下一个对称数是96069,不,还是每次增加,然后再判断对称数吧。流程图graphA[开始]-->B[i=95859+1]-->C[i++]-->D{i......
  • 每日编程一小时(第十一天)
    一.问题描述递归法编写程序求勒让德多项式的值二.设计思路1.数入两个数n,x2.编写一个函数当n==0,p=1;n==1,p==x;n>1,p=((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n 返回值为p,实现递归调用3.输出三.流程图 四.程序实现#include<iostream>usingnam......