六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 41|回复: 0

Socket多客户端(转自生菜肥羊)

[复制链接]

升级  78%

9

主题

9

主题

9

主题

童生

Rank: 1

积分
39
 楼主| 发表于 2013-1-15 02:55:28 | 显示全部楼层 |阅读模式
客户端:
 
import java.io.*;   import java.net.*;   public class talkclient   {       public static void main(String args[])       {           try          {               Socket socket = new Socket("192.168.13.123",9999);               BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));               PrintWriter os = new PrintWriter(socket.getOutputStream());               BufferedReader is = new BufferedReader(new InputStreamReader(                   socket.getInputStream()));               String readline;                              while (!"bye".equals(readline=sin.readLine()))                {                   //==============写服务端==================//                   os.println(readline);                   os.flush();                   //System.out.println("Client:" + readline);                                      //==============读服务端==================//                   System.out.println("服务端反馈:"+is.readLine());               }               String ss=is.readLine();               while(ss!=""){                   System.out.println(ss);               }               os.close();               is.close();               socket.close();           }catch(Exception e)           {               System.out.println("Error" + e);           }       }   }    
服务端:负责接收多个客户端的连接 ,然后交给多线程去处理
import java.io.*;   import java.net.*;   //引入了无关的类   import java.applet.Applet;     public class talkserver {       static int clientnum = 0; // 静态成员变量,记录当前客户的个数              public static void main(String args[]) {           ServerSocket server = null;           try {               server = new ServerSocket(9999);           } catch (IOException e1) {               e1.printStackTrace();           }                     while(true){           try {                              Socket socket = server.accept();               System.out.println("一个客户端连上来了....");               ServerThread thread=new ServerThread(socket);               //thread.start();           } catch (IOException e) {               e.printStackTrace();           }                     }       }   }   
多线程程序:
import java.io.*;     import java.net.*;     /**   * 服务器端逻辑线程   */  public class ServerThread extends Thread {       Socket socket;       BufferedReader br=null;       PrintWriter os=null;       public ServerThread(Socket socket) {           this.socket = socket;           start(); //启动线程       }              public void run() {           BufferedReader is=null;            PrintWriter os=null;                      try {               boolean flag=true;               //ServerSocket server = null;               //Socket socket = null;               //ServerSocket server = new ServerSocket(9999);               System.out.println("server listen on port 9999...");               //socket = server.accept();               is = new BufferedReader(new InputStreamReader(socket.getInputStream()));               os = new PrintWriter(socket.getOutputStream());                         while(flag){                System.out.println("-------------------");                  //多线程                 //new ServerThread(socket, clientnum).start();                                                    //标准输入端读取一行                    BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));                   String str;                   String reply;                   while(!"".equals(str=is.readLine())){                       System.out.println(".....start...........");                                           System.out.println(str); //每写一行,就等着从客户端读进一行,                        reply=sin.readLine();                        os.println("服务端 说:"+reply); //写到客户端                       os.flush();                                              System.out.println("......end.........");                   }                                        System.out.println("out of while...");                     //String line=sin.readLine();                   os.println("server AAAAAAAAAAAAA"); //写到客户端                   os.flush();               }                      //****流如果关闭,socket也将会关闭,所以如果想在一个socket连接之内通讯*****//,           //***则应该在while之外关闭socket****//                      //server.close();                      } catch (Exception e) {               System.out.println("Error" + e);           }finally{               try {                   is.close();                   os.close();                   socket.close();               } catch (IOException e) {                   e.printStackTrace();               }                          }                     }         /**        * 关闭流和连接        */      private void close() {           try {               //关闭流和连接               os.close();               br.close();               socket.close();           } catch (Exception e) {           }       }            }   
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表