eason26_li 发表于 2013-2-3 10:16:41

Socket 网络交互简单示例

java中的网络信息传输方式是基于TCP协议或者UD协议P的,socket是基于TCP协议的
例子1(1)客户端程序:import java.io.*;import java.net.*;public class Client{public static void main(String args[])   {String s=null;      Socket mysocket;      DataInputStream in=null;      DataOutputStream out=null;      try{          mysocket=new Socket("localhost",4331);          in=new DataInputStream(mysocket.getInputStream());          out=new DataOutputStream(mysocket.getOutputStream());         out.writeUTF("你好!");//通过 out向"线路"写入信息。          while(true)            {                s=in.readUTF();//通过使用in读取服务器放入"线路"里的信息。堵塞状态,                           //除非读取到信息。               out.writeUTF(":"+Math.random());               System.out.println("客户收到:"+s);               Thread.sleep(500);            }          }       catch(IOException e)         {System.out.println("无法连接");         }       catch(InterruptedException e){}   } }(2)服务器端程序:import java.io.*;import java.net.*;public class Server{ public static void main(String args[]){ServerSocket server=null;   Socket you=null;String s=null;   DataOutputStream out=null;DataInputStreamin=null;   try{ server=new ServerSocket(4331);}      catch(IOException e1){System.out.println("ERRO:"+e1);}      try{you=server.accept();         in=new DataInputStream(you.getInputStream());         out=new DataOutputStream(you.getOutputStream());         while(true)         {             s=in.readUTF();// 通过使用in读取客户放入"线路"里的信息。堵塞状态,                           //除非读取到信息。             out.writeUTF("你好:我是服务器");//通过 out向"线路"写入信息.             out.writeUTF("你说的数是:"+s);             System.out.println("服务器收到:"+s);             Thread.sleep(500);         }      }   catch(IOException e)         {System.out.println(""+e);         }       catch(InterruptedException e){}   }}例子(2)(1) 客户端import java.net.*;import java.io.*;import java.awt.*;import java.awt.event.*;import java.applet.*;public class Computer_client extends Applet implements Runnable,ActionListener{Button 计算;TextField 输入三边长度文本框,计算结果文本框;   Socket socket=null;   DataInputStream in=null; DataOutputStream out=null;   Thread thread;    public void init()   {setLayout(new GridLayout(2,2));      Panel p1=new Panel(),p2=new Panel();       计算=new Button(" 计算");      输入三边长度文本框=new TextField(12);计算结果文本框=new TextField(12);      p1.add(new Label("输入三角形三边的长度,用逗号或空格分隔:"));    p1.add( 输入三边长度文本框);      p2.add(new Label("计算结果:"));p2.add(计算结果文本框);p2.add(计算);      计算.addActionListener(this);      add(p1);add(p2);   }   public void start()   {try         {//和小程序所驻留的服务器建立套接字连接:            socket = new Socket(this.getCodeBase().getHost(), 4331);             in =new DataInputStream(socket.getInputStream());            out = new DataOutputStream(socket.getOutputStream());         }       catch (IOException e){}      if(thread == null)      {thread = new Thread(this);         thread.start();      }   }   public void run()   {String s=null;      while(true)       {    try{s=in.readUTF();//堵塞状态,除非读取到信息。                  计算结果文本框.setText(s);               }         catch(IOException e) {计算结果文本框.setText("与服务器已断开");   break;}          }}public void actionPerformed(ActionEvent e){if(e.getSource()==计算)      {String s=输入三边长度文本框.getText();         if(s!=null)         {try {out.writeUTF(s);                  }            catch(IOException e1){}            }                  }}} (2) 服务器端import java.io.*;import java.net.*;import java.util.*;import java.sql.*;public class Computer_server {public static void main(String args[])   {ServerSocket server=null;Server_thread thread;      Socket you=null;      while(true)      {try{server=new ServerSocket(4331);             }          catch(IOException e1)            {System.out.println("正在监听"); //ServerSocket对象不能重复创建。             }         try{you=server.accept();                System.out.println("客户的地址:"+you.getInetAddress());             }         catch (IOException e)             {System.out.println("正在等待客户");             }         if(you!=null)            {new Server_thread(you).start(); //为每个客户启动一个专门的线程。               }         else            {continue;             }      }   }}class Server_thread extends Thread{Socket socket;Connection Con=null;Statement Stmt=null;   DataOutputStream out=null;DataInputStreamin=null;int n=0;   String s=null;   Server_thread(Socket t)   {socket=t;      try {in=new DataInputStream(socket.getInputStream());             out=new DataOutputStream(socket.getOutputStream());          }      catch (IOException e)          {}   }   public void run()         {while(true)      {double a[]=new double ;int i=0;         try{s=in.readUTF();堵塞状态,除非读取到信息。    StringTokenizer fenxi=new StringTokenizer(s," ,");               while(fenxi.hasMoreTokens())                   {String temp=fenxi.nextToken();                      try{a=Double.valueOf(temp).doubleValue();i++;                         }                      catch(NumberFormatException e){out.writeUTF("请输入数字字符");                         }                   }                double p=(a+a+a)/2.0;                out.writeUTF(" "+Math.sqrt(p*(p-a)*(p-a)*(p-a)));                sleep(2);                }         catch(InterruptedException e){}         catch (IOException e)             {System.out.println("客户离开");break;            }      }   } }
这些例子都是Java2实用教程上的.
页: [1]
查看完整版本: Socket 网络交互简单示例