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

网络编程

时间:2024-07-30 22:39:19浏览次数:17  
标签:java socket 编程 网络 new import net public

网络编程

1.1 ip

package com.jf.lesson01;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class TestInetAdress {
   public static void main(String[] args) {
       try {
           InetAddress inetAddress1 = InetAddress.getByName("127.0.0.1");
           System.out.println(inetAddress1);
           InetAddress inetAddress2 = InetAddress.getByName("localhost");
           System.out.println(inetAddress2);
           InetAddress inetAddress3 = InetAddress.getLocalHost();
           System.out.println(inetAddress3);
           //查询网站ip地址
           InetAddress inetAddress4 = InetAddress.getByName("www.baidu.com");
           System.out.println(inetAddress4);

           System.out.println(inetAddress4.getCanonicalHostName());
      } catch (UnknownHostException e) {
           throw new RuntimeException(e);
      }
  }
}

1.2 端口

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

不同的进程有不同的端口号

被规定0~65535

单个协议下端口号不能冲突

端口分类

公共端口0~1023

HTTP:80

HTTPS:443

ssh:22

FTP:21

Telnet:23

程序注册端口:1024~49151,分配用户或者程序

Tomcat:8080

Mysql:3306

Oracle:1521

动态,私有:49152~65535

netstat -ano #查看所有的端口
netstat -ano|findstr "5900" #查看指定的端口
tasklist|findstr ""   # 查看指定端口的进程

 

package com.jf.lesson01;

import java.net.InetSocketAddress;

public class TestInetSockAdress {
   public static void main(String[] args) {
       InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1", 8080);
       System.out.println(inetSocketAddress);

  }
}

1.3通信协议

1.4 tcp/ip协议

客户端

1.连接服务器Socket

2.发送消息

package com.jf.lesson01.lesson02;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

//客户端
public class TcpClientDemo01 {
   public static void main(String[] args) {
       Socket socket =null;
       OutputStream os =null;
       //1.要知道服务器的地址
       try {
           InetAddress ServerIp = InetAddress.getByName("127.0.0.1");
           //2.端口号
           int port =9999;
           //3.创建一个socket连接
           socket = new Socket(ServerIp,port);
           //4.发送消息IO流
            os = socket.getOutputStream();
           os.write("你好,收到消息".getBytes());
      } catch (Exception e) {
           throw new RuntimeException(e);
      }finally {
           if(os!=null){
               try {
                   os.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
           if(socket!=null){
               try {
                   socket.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
      }
  }
}

服务器

1.建立服务的端口ServerSocket

2.等到用户的连接accept();

3.接收用户的消息

package com.jf.lesson01.lesson02;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

//服务端
public class TcpServerDemo01 {
   public static void main(String[] args) {
       ServerSocket serverSocket =null;
       Socket socket =null;
       InputStream is =null;
       ByteArrayOutputStream baos  =null;
       try {
           //1.设置服务器的地址
            serverSocket = new ServerSocket(9999);
           //2.等待客户端连接
            socket = serverSocket.accept();
           //3.读取客户端的消息
            is = socket.getInputStream();
           //管道流
            baos = new ByteArrayOutputStream();
           byte[] buffer = new byte[1024];
           int len;
           while ((len=is.read(buffer))!=-1){
                   baos.write(buffer,0,len);
          }
           System.out.println(baos.toString());


      } catch (IOException e) {
           e.printStackTrace();
      }finally {
           //关闭资源
           if(baos!=null){
               try {
                   baos.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
           if(is!=null){
               try {
                   is.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
           if(socket!=null){
               try {
                   socket.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
           if(serverSocket!=null){
               try {
                   serverSocket.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
      }
  }
}

文件上传

package com.jf.lesson01.lesson02;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServerDemo02 {
   public static void main(String[] args) throws Exception {
       //1.创建服务
       ServerSocket serverSocket = new ServerSocket(9000);
       //2.监听客户端的连接
       Socket socket = serverSocket.accept();//阻塞式连接,会一直等待客户端连接
       //3.获取输入流
       InputStream is = socket.getInputStream();
       //4.文件输出
       FileOutputStream fos = new FileOutputStream(new File("receive.jpg"));
       byte[] buffer = new byte[1024];
       int len;
       while ((len=is.read(buffer))!=-1){
           fos.write(buffer,0,len);
      }
       //通知客户端我接收完毕了
       OutputStream os = socket.getOutputStream();
       os.write("我接受完毕了".getBytes());
       //关闭资源
       fos.close();
       is.close();
       socket.close();
       serverSocket.close();
  }
}
package com.jf.lesson01.lesson02;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class TcpClientDemo02 {
   public static void main(String[] args) throws Exception {
       //1.创建一个socket连接
       Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
       //2.创建一个输出流
       OutputStream os = socket.getOutputStream();
       //3.读取文件流
       FileInputStream fis = new FileInputStream(new File("02.jpg"));
       //4.写出文件
       byte[] buffer = new byte[1024];
       int len;
       while ((len=fis.read(buffer))!=-1){
           os.write(buffer,0,len);
      }
       //通知服务器,已经传输完了
       socket.shutdownOutput();
       //确定服务器接收完毕,才能断开连接
       InputStream inputStream = socket.getInputStream();
       //String byte[]
       ByteArrayOutputStream baos = new ByteArrayOutputStream();
       byte[] buffer2 = new byte[2014];
       int len2;
       while ((len2=inputStream.read(buffer2))!=-1){
           baos.write(buffer2,0,len2);
      }
       System.out.println(baos.toString());
       //5.关闭资源
       baos.close();
       inputStream.close();
       fis.close();
       os.close();
       socket.close();
  }
}

 

1.5 udp

发短信,不需要连接,需要知道对方的地址

发送端

package com.jf.lesson03;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

//不需要连接服务器
public class UdpClientDemo01 {
   public static void main(String[] args) throws Exception {
       //1.建立一个Socket
       DatagramSocket socket = new DatagramSocket();
       //2.建立包
       //发送给谁
       InetAddress localhost = InetAddress.getByName("localhost");
       int port =9090;
       String msg="你好啊";
       //数据,数据的长度起始,要发送给谁
       DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);
       //3.发送包
       socket.send(packet);
       //4.关闭流
       socket.close();
  }
}

接收端

package com.jf.lesson03;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UdpServerDemo01 {
   public static void main(String[] args) throws Exception {
       //开放端口
       DatagramSocket socket = new DatagramSocket(9090);
       //接收数据包
       byte[] buffer = new byte[1024];
       DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
       socket.receive(packet);//阻塞接收
       System.out.println(packet.getAddress().getHostAddress());
       System.out.println(new String(packet.getData(),0,packet.getLength()));
       //关闭连接
       socket.close();
  }
}

循环发送消息

package com.jf.chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class UdpSenderDemo01 {
   public static void main(String[] args) throws Exception {
       DatagramSocket socket = new DatagramSocket(8888);
       //准备数据 system.in
       BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
       while (true){
           String data = reader.readLine();
           byte[] datas = data.getBytes();
           DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",6666));
           socket.send(packet);
           if(data.equals("bye")){
               break;
          }
      }

       socket.close();
  }
}

循环接收消息

package com.jf.chat;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

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

       while (true){
           //准备接收的包裹
           byte[] container = new byte[1024];
           DatagramPacket packet = new DatagramPacket(container,0,container.length);
           socket.receive(packet);//阻塞式接收包裹
           //断开连接,bye
           byte[] data = packet.getData();
           String receivedata = new String(data, 0, packet.getLength());
           System.out.println(receivedata);
           if(receivedata.equals("bye")){
               break;
          }

      }
           socket.close();
  }
}

咨询

package com.jf.chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

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 (SocketException e) {
           e.printStackTrace();
      }
  }

   @Override
   public void run() {
       while (true){
           try{
               String data = reader.readLine();
               byte[] datas = data.getBytes();
               DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIP,this.toPort));
               socket.send(packet);
               if(data.equals("bye")){
                   break;
              }
          }catch (Exception e){
               e.printStackTrace();
          }
      }
       socket.close();
  }
}
package com.jf.chat;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

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 (SocketException e) {
           e.printStackTrace();
      }
  }

   @Override
   public void run() {
       while (true){
           try {
               //准备接收的包裹
               byte[] container = new byte[1024];
               DatagramPacket packet = new DatagramPacket(container,0,container.length);
               socket.receive(packet);//阻塞式接收包裹
               //断开连接,bye
               byte[] data = packet.getData();
               String receivedata = new String(data, 0, packet.getLength());
               System.out.println(msgFrom+":"+receivedata);
               if(receivedata.equals("bye")){
                   break;
              }
          } catch (IOException e) {
               e.printStackTrace();
          }
      }
       socket.close();
  }
}
package com.jf.chat;

public class TalkStudent {
   public static void main(String[] args) {
       //开启两个线程
       new Thread(new TalkSend(7777,"localhost",9999)).start();
       new Thread(new TalkReceive(8888,"老师")).start();
  }
}
package com.jf.chat;

public class TalkTeacher {
   public static void main(String[] args) {
       //开启两个线程
       new Thread(new TalkSend(5555,"localhost",8888)).start();
       new Thread(new TalkReceive(9999,"学生")).start();
  }
}

1.6 URL

统一资源定位符:定位资源的,定位互联网上的某一资源

URL下载资源

package com.jf.lesson04;

import javax.net.ssl.HttpsURLConnection;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class URLDown {
   public static void main(String[] args) throws IOException {
       //1.下载地址
       URL url = new URL("http://localhost:8080/jf/01.txt");
       //2.连接这个地址
       HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
       InputStream inputStream = urlConnection.getInputStream();
       FileOutputStream fos = new FileOutputStream("01.txt");
       byte[] buffer = new byte[1024];
       int len;
       while ((len=inputStream.read(buffer))!=-1){
           fos.write(buffer,0,len);
      }
       fos.close();
       inputStream.close();
       urlConnection.disconnect();//断开连接
  }
}

url

package com.jf.lesson04;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

import java.net.MalformedURLException;
import java.net.URL;

public class URLDemo01 {
   public static void main(String[] args) throws MalformedURLException {
       URL url = new URL("Http://localhost:8080/hello/index.jsp?username=jf&password=123");
       System.out.println(url.getProtocol());//协议
       System.out.println(url.getHost());//主机
       System.out.println(url.getPort());//端口
       System.out.println(url.getPath());//文件
       System.out.println(url.getFile());//全路径
       System.out.println(url.getQuery());//参数
  }
}

标签:java,socket,编程,网络,new,import,net,public
From: https://www.cnblogs.com/huangjiangfei/p/18333493

相关文章