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 }
  • 相关阅读:
    HTML DOM教程 14HTML DOM Document 对象
    HTML DOM教程 19HTML DOM Button 对象
    HTML DOM教程 22HTML DOM Form 对象
    HTML DOM教程 16HTML DOM Area 对象
    ubuntu 11.04 问题 小结
    VC6.0的 错误解决办法 小结
    boot.img的解包与打包
    shell里 截取字符串
    从零 使用vc
    Imagemagick 对图片 大小 和 格式的 调整
  • 原文地址:https://www.cnblogs.com/juncaoit/p/6922826.html
Copyright © 2011-2022 走看看