zoukankan      html  css  js  c++  java
  • java的网络编程

    一:基础的网络编程

    1.InetAddress

     1 import java.net.InetAddress;
     2 public class Test128 {
     3     public static void main(String[] args) throws Exception {
     4         //inetMethod();
     5         inetMethod2();
     6     }
     7     public static void inetMethod()throws Exception{
     8         //local的问题
     9         InetAddress i=InetAddress.getLocalHost();
    10         String address=i.getHostAddress();
    11         String name=i.getHostName();
    12         System.out.println("address="+address);
    13         System.out.println("name="+name);
    14     }
    15     public static void inetMethod2()throws Exception{
    16         //根据域名来处理        
    17         InetAddress ia=InetAddress.getByName("www.baidu.com");
    18         String address=ia.getHostAddress();
    19         String name=ia.getHostName();
    20         System.out.println("address="+address);
    21         System.out.println("name="+name);
    22     }
    23 
    24 }

    二:UDP

    1.接收端

     1 import java.net.DatagramPacket;
     2 import java.net.DatagramSocket;
     3 
     4 public class Test130 {
     5 
     6     public static void main(String[] args) throws Exception {
     7         reviceShow();
     8 
     9     }
    10     public static void reviceShow()throws Exception{
    11         DatagramSocket ds=new DatagramSocket(10004);
    12         byte[] buf=new byte[1024];
    13         DatagramPacket dp=new DatagramPacket(buf,buf.length);
    14         ds.receive(dp);
    15         String ip=dp.getAddress().getHostAddress();
    16         String data=new String(dp.getData(),0,dp.getLength());
    17         int port=dp.getPort();
    18         System.out.println("ip="+ip);
    19         System.out.println("data="+data);
    20         System.out.println("port="+port);
    21     }
    22 
    23 }

    2.发送端

     1 import java.net.DatagramPacket;
     2 import java.net.DatagramSocket;
     3 import java.net.InetAddress;
     4 
     5 /**
     6  * 发送端
     7  * @author Administrator
     8  *
     9  */
    10 public class Test129 {
    11     public static void main(String[] args) throws Exception {
    12         sendShow();        
    13     }
    14     public static void sendShow()throws Exception{
    15         DatagramSocket ds=new DatagramSocket();
    16         byte[] buf="info send".getBytes();
    17         DatagramPacket dp=new DatagramPacket(buf,buf.length,
    18                 InetAddress.getByName("10.66.130.139"),10004);
    19         ds.send(dp);
    20         ds.close();
    21     }
    22 }

    三:TCP

    1.通信,交换图片(但是一次)

    先是服务端:

     1 import java.io.FileOutputStream;
     2 import java.io.IOException;
     3 import java.io.InputStream;
     4 import java.io.OutputStream;
     5 import java.net.ServerSocket;
     6 import java.net.Socket;
     7 
     8 /**
     9  * 服务端
    10  * @author Administrator
    11  *
    12  */
    13 public class Test123 {
    14 
    15     public static void main(String[] args) throws Exception {
    16         ServerSocket ss=new ServerSocket(10009);
    17         Socket s=ss.accept();
    18         InputStream in=s.getInputStream();
    19         FileOutputStream fos=new FileOutputStream("shsj.jpg");
    20         byte[] buf=new byte[1024];
    21         int len=0;
    22         while((len=in.read(buf))!=-1){
    23             fos.write(buf, 0, len);
    24         }
    25         OutputStream out=s.getOutputStream();
    26         out.write("成功".getBytes());
    27         fos.close();
    28         s.close();
    29         ss.close();
    30     }
    31 
    32 }

    再是客户端:

     1 import java.io.FileInputStream;
     2 import java.io.IOException;
     3 import java.io.InputStream;
     4 import java.io.OutputStream;
     5 import java.net.Socket;
     6 import java.net.UnknownHostException;
     7 
     8 /**
     9  * 发送端
    10  * @author Administrator
    11  *
    12  */
    13 public class Test122 {
    14     public static void main(String[] args) throws Exception {
    15         Socket s=new Socket("10.66.113.25",10009);
    16         FileInputStream fis=new FileInputStream("u.jpg");
    17         OutputStream out=s.getOutputStream();
    18         byte[] buf=new byte[1024];
    19         int len=0;
    20         while((len=fis.read(buf))!=-1){
    21             out.write(buf, 0, len);
    22         }
    23         //important
    24         s.shutdownOutput();
    25         InputStream ins=s.getInputStream();
    26         byte[] bufin=new byte[1024];
    27         int num=ins.read(bufin);
    28         System.out.println(new String(bufin,0,num));
    29         fis.close();
    30         ins.close();
    31         s.close();
    32     }
    33 
    34 }

    2.多线程服务端

    先写客户端

    注意添加一些限制条件,同时,这里是添加的参数是文件路径

     1 import java.io.File;
     2 import java.io.FileInputStream;
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.io.OutputStream;
     6 import java.net.Socket;
     7 import java.net.UnknownHostException;
     8 
     9 public class Test124 {
    10 
    11     public static void main(String[] args) throws Exception {
    12         if(args.length!=1){
    13             System.out.println("choose a pic");
    14             return;
    15         }
    16         File file=new File(args[0]);
    17         if(!(file.exists()&&file.isFile())){
    18             System.out.println("file have problem");
    19             return;
    20         }
    21         if(!file.getName().endsWith(".jpg")){
    22             System.out.println("file type is error");
    23             return;
    24         }
    25         if(file.length()>1024*1024*5){
    26             System.out.println("file > 5M");
    27             return;
    28         }
    29         Socket s=new Socket("10.66.113.25",10019);
    30         FileInputStream fis=new FileInputStream(file);
    31         OutputStream out=s.getOutputStream();
    32         byte[] buf=new byte[1024];
    33         int len=0;
    34         while((len=fis.read(buf))!=-1){
    35             out.write(buf, 0, len);
    36         }
    37         s.shutdownOutput();
    38         InputStream in=s.getInputStream();
    39         byte[] bufin=new byte[1024];
    40         int num=in.read(bufin);
    41         String str=new String(bufin,0,num);
    42         fis.close();
    43         s.close();        
    44     }
    45 }

    再写服务端

     1 import java.io.File;
     2 import java.io.FileOutputStream;
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.io.OutputStream;
     6 import java.net.ServerSocket;
     7 import java.net.Socket;
     8 
     9 /**
    10  * 服务端
    11  * @author Administrator
    12  *
    13  */
    14 public class Test125 {
    15 
    16     public static void main(String[] args) throws Exception {
    17         ServerSocket ss=new ServerSocket(10019);
    18         while(true){
    19             Socket s=ss.accept();
    20             new Thread(new ServerThread(s)).start();
    21         }
    22     }
    23 }
    24 /**
    25  * 需要一个多线程的类
    26  * 下面类是用在服务端的类
    27  */
    28 class ServerThread implements Runnable{
    29     private Socket s;
    30     public ServerThread(Socket s){
    31         this.s=s;
    32     }
    33     public void run(){
    34         int count=1;
    35         String ip=s.getInetAddress().getHostAddress();
    36         try{
    37             System.out.println(ip+"connect");
    38             InputStream ins=s.getInputStream();
    39             File dir=new File("d:\pic");
    40             File file=new File(dir,ip+"("+count+").jpg");
    41             while(file.exists()){
    42                 file=new File(dir,ip+"("+(count++)+").jpg");
    43             }
    44             FileOutputStream fos=new FileOutputStream(file);
    45             byte[] buf=new byte[1024];
    46             int len=0;
    47             while((len=ins.read(buf))!=-1){
    48                 fos.write(buf, 0, len);
    49             }
    50             OutputStream out=s.getOutputStream();
    51             out.write("success".getBytes());
    52             fos.close();
    53             s.close();
    54             
    55         }catch(Exception e){
    56             new RuntimeException();
    57         }
    58     }
    59 }

    3.客户端并发登录

    服务端

     1 import java.io.BufferedReader;
     2 import java.io.FileReader;
     3 import java.io.InputStreamReader;
     4 import java.io.PrintWriter;
     5 import java.net.ServerSocket;
     6 import java.net.Socket;
     7 
     8 public class Test127 {
     9 
    10     public static void main(String[] args) throws Exception{
    11         ServerSocket ss=new ServerSocket(10089);
    12         while(true){
    13             Socket s=ss.accept();
    14             new Thread(new LoginThread(s)).start();
    15         }
    16     }
    17 }
    18 class LoginThread implements Runnable{
    19     private Socket s;
    20     LoginThread(Socket s){
    21         this.s=s;
    22     }
    23     public void run(){
    24         String ip=s.getInetAddress().getHostAddress();
    25         System.out.println("ip="+ip+" connect");
    26         try{
    27             for(int i=0;i<3;i++){
    28                 BufferedReader bufin=new BufferedReader(new InputStreamReader(
    29                         s.getInputStream()));
    30                 String str=bufin.readLine();
    31                 if(str==null)
    32                     break;
    33                 BufferedReader buf=new BufferedReader(new FileReader("user.txt"));
    34                 PrintWriter out=new PrintWriter(s.getOutputStream(),true);
    35                 String line=null;
    36                 boolean flag=false;
    37                 while((line=buf.readLine())!=null){
    38                     if(line.equals(str)){
    39                         flag=true;
    40                         break;
    41                     }
    42                 }
    43                 if(flag){
    44                     System.out.println(str+"已登录");
    45                     out.println(str+"欢迎登录");
    46                     break;
    47                 }else{
    48                     System.out.println(str+"尝试登录");
    49                     out.println(str+"用户不存在");
    50                 }
    51             }
    52         }catch(Exception e){
    53             throw new RuntimeException(ip+"failed");
    54         }
    55     }
    56 }

    客户端

     1 import java.io.BufferedReader;
     2 import java.io.IOException;
     3 import java.io.InputStreamReader;
     4 import java.io.PrintWriter;
     5 import java.net.Socket;
     6 import java.net.UnknownHostException;
     7 
     8 /**
     9  * client
    10  * @author Administrator
    11  *
    12  */
    13 public class Test126 {
    14 
    15     public static void main(String[] args) throws Exception {
    16         Socket s=new Socket("10.66.113.25",10089);
    17         //键盘录入
    18         BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
    19         //输出到服务端
    20         PrintWriter out=new PrintWriter(s.getOutputStream(),true);
    21         //读取返回内容
    22         BufferedReader bufin=new BufferedReader(
    23                 new InputStreamReader(s.getInputStream()));
    24         //次数
    25         for(int x=0;x<3;x++){
    26             String line=bufr.readLine();
    27             if(line==null)
    28                 break;
    29             out.println(line);
    30             String info=bufin.readLine();
    31             System.out.println("info="+info);
    32             if("info".contains("欢迎"))
    33                 break;
    34         }
    35         bufr.close();
    36         s.close();
    37 
    38     }
    39 
    40 
    41 }
  • 相关阅读:
    php函数总结
    文本框输入限制
    e.keyCode和e.which使用
    transform总结
    wampSever的mysql操作
    linux命令总结
    nginx总结
    微雪的stm32学习资料
    串口+RS485驱动
    cubemx+stm32串口学习汇总资料
  • 原文地址:https://www.cnblogs.com/juncaoit/p/6922826.html
Copyright © 2011-2022 走看看