知识大全 Java Socket 编程——多线程网络聊天程序

Posted 客户

篇首语:为了生活中努力发挥自己的作用,热爱人生吧。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java Socket 编程——多线程网络聊天程序相关的知识,希望对你有一定的参考价值。

Java Socket 编程——多线程网络聊天程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  用java进行网络编程确实很方便 很容易上手 这几天用java进行socket编程 收获不少

  首先 进行服务端的编程 作为服务端 编程主要按下面几个步骤进行

  // 创建socket    ServerSocket ss = new ServerSocket(PortNumber);    Socket s = ss accept(); //监听器 产生阻塞 直到有连接才停止阻塞

  // 打开输入流 输出流    OutputStream os = s getOutputStream();    BufferedOutputStream bos = new BufferedOutputStream(os);    InputStream is = s getInputStream();

  // 根据一定的协议读写数据    // 服务器 > 客户    //os write( Hello I am Server! getBytes());    bos write( Hello I am Server! getBytes());    bos flush(); //注意!!

  // 服务器 < 客户    byte[] buf = new byte[ ];    int len = is read(buf);    System out println(new String(buf len));

  // 关系流和Socket    //os close();    bos close();    is close();    s close();    ss close();

  作为客户端则分为下面几个步骤 其实和服务端差不多 只是少了用ServerSocket进行监听

  // 创建socket    Socket s = new Socket(InetAddress getByName( localhost )             PortNumber);    // 打开输入流 输出流    OutputStream os = s getOutputStream();    InputStream is = s getInputStream();

  // 根据一定的协议读写数据    // 服务器 > 客户    byte[] buf = new byte[ ];    int len = is read(buf);    System out println(new String(buf len));    // 服务器 < 客户    os write( Hello I am Client! getBytes());

  // 关系流和Socket    os close();    is close();    s close();

  上面这些只是一个单线程的服务端 >客户端的程序 只能进行一次通讯 多次通讯将被告知无法连接

  这时 我们就需要用到进程Thread进行编程 将其改造成多线程聊天程序 可以同时进行多客户端的连接与发送信息

  代码如下

  //Server java

  import java awt *;    import *;    import java io *;

  public class Server extends Thread         ServerSocket skt;

  Socket Client[]=new Socket[ ];;        Socket Client =null;

  int i = ;

  TextArea in;

  int port k= l= ;

  //BufferedReader theInputStream;

  PrintStream theOutputStream;

  //String readin;

  Face chat;

  public Server(int port Face chat)             try                 this port = port;                skt = new ServerSocket(port);                this chat = chat;            catch (IOException e)                 chat ta append(e toString());                   

  public void run()

  chat ta append( 等待连线 );

  while (true)                 //System out print( +i+ \\n );                try

  Client[k] = skt accept(); /* 接收客户连接 */

  //当有客户端连接时就新建一个子线程

  if (i < )                     ServerThread server[] = new ServerThread[ ];                     server[k]= new ServerThread(Client[k] this chat i);                     l=server length;                     server[k] start();                    chat ta append( 客户端 + Client[k] getInetAddress() + 已连线\\n );                    /*theInputStream = new BufferedReader(new InputStreamReader(Client                            getInputStream()));*/                    //for(int j= ;j<server length;j++)                    theOutputStream = new PrintStream(server[k] getClient() getOutputStream());                    i = server[k] getI();                    k++;                else                     //theOutputStream = new PrintStream(null);               

   catch (SocketException e)                 //chat ta append( 连线中断!\\n );

  //chat clientBtn setEnabled(true);                //chat serverBtn setEnabled(true);                //chat tfaddress setEnabled(true);                //chat tfport setEnabled(true);                //try

  //skt close();                        //Client close();                    // catch (IOException err)                     //    chat ta append(err toString());                    //                catch (IOException e)                     chat ta append(e toString());                           

  

  public void dataout(String data)             //for(int j= ;j<l;j++)            theOutputStream println(data);           

  class ServerThread extends Thread         ServerSocket skt;

  Socket Client;

  TextArea in;

  int port;

  int i;

  BufferedReader theInputStream;

  PrintStream theOutputStream;

  String readin;

  Face chat;

    //服务端子线程

  public ServerThread(Socket s Face chat int i)             this i = ++i;            Client = s;            //this port = port;            //skt = new ServerSocket(port);            this chat = chat;

  

  public int getI()             return this i;                public Socket getClient()             return this Client;                public void run()

  //chat ta append( 等待连线 );

  try                 //Client = skt accept(); /* 接收客户连接 */

  //chat ta append( 客户端 + Client getInetAddress() + 已连线\\n );                theInputStream = new BufferedReader(new InputStreamReader(Client                        getInputStream()));                theOutputStream = new PrintStream(Client getOutputStream());

  while (true)                     readin = theInputStream readLine();                    chat ta append(readin + \\n );               

   catch (SocketException e)                 chat ta append( 连线中断!\\n );

  chat clientBtn setEnabled(true);                chat serverBtn setEnabled(true);                chat tfaddress setEnabled(true);                chat tfport setEnabled(true);                try                     i ;                    skt close();                    Client close();                catch (IOException err)                     chat ta append(err toString());                            catch (IOException e)                 chat ta append(e toString());                   

  public void dataout(String data)             theOutputStream println(data);           

  //Client java

  import *;    import java io *;    import javax swing Timer;    class Client extends Thread         Socket skt;        InetAddress host;        int port;

  BufferedReader theInputStream;        PrintStream theOutputStream;        String readin;

  Face chat;

  public Client(String ip int p Face chat)             try                 host = InetAddress getByName(ip);                port = p;                this chat = chat;            catch (IOException e)                 chat ta append(e toString());                   

  public void run()             try                 chat ta append( 尝试连线 );

  skt = new Socket(host port);                chat ta append( 连线成功\\n );

  theInputStream = new BufferedReader(new InputStreamReader(skt                        getInputStream()));

  theOutputStream = new PrintStream(skt getOutputStream());                //Timer myTimer = new Timer();                while (true)                     readin = theInputStream readLine();                    chat ta append(readin + \\n );                            catch (SocketException e)                 chat ta append( 连线中断!\\n );                chat clientBtn setEnabled(true);                chat serverBtn setEnabled(true);                chat tfaddress setEnabled(true);                chat tfport setEnabled(true);                try                     skt close();                catch (IOException err)                     chat ta append(err toString());                            catch (IOException e)                 chat ta append(e toString());                   

  public void dataout(String data)             theOutputStream println(data);           

  //软件界面 进行按键监听调用

  //face java

  import java awt *;    import java awt event *;

  public class Face extends Frame         /**         *         */        private static final long serialVersionUID = L;        Button clientBtn serverBtn;        TextArea ta;        TextField tfaddress tfport tftype;        int port;        Client client;        Server server;        boolean iamserver;        static Face frm;

  public Face()             clientBtn = new Button( 客户端 );            serverBtn = new Button( 服务器 );            ta = new TextArea( TextArea SCROLLBARS_BOTH);            tfaddress = new TextField( );            tfport = new TextField( );            tftype = new TextField( );

  tftype addKeyListener(new TFListener());            ta setEditable(false);

  setLayout(new FlowLayout());            add(tfaddress);            add(tfport);            add(clientBtn);            add(serverBtn);            add(ta);            add(tftype);            setSize( );            setTitle( 我的聊天室 );            this setVisible(true);

  clientBtn addActionListener(new ActionListener()                 public void actionPerformed(ActionEvent e)

  port = Integer parseInt(tfport getText());

  client = new Client(tfaddress getText() port frm);

  client start();

  tfaddress setEnabled(false);                    tfport setEnabled(false);                    serverBtn setEnabled(false);                    clientBtn setEnabled(false);                            );

  serverBtn addActionListener(new ActionListener()                 public void actionPerformed(ActionEvent e)

  port = Integer parseInt(tfport getText());

  server = new Server(port frm);

  server start();

  iamserver = true;                    tfaddress setText( 成为服务器 );

  tfaddress setEnabled(false);                    tfport setEnabled(false);                    serverBtn setEnabled(false);                    clientBtn setEnabled(false);                            );

  addWindowListener(new WindowAdapter()                 public void windowClosing(WindowEvent e)                     System exit( );                            );

  

  public static void main(String args[])             frm = new Face();       

  private class TFListener implements KeyListener             public void keyPressed(KeyEvent e)

  if (e getKeyCode() == KeyEvent VK_ENTER)

  ta append( > + tftype getText() + \\n );

  if (iamserver)                        server dataout(tftype getText());                    else                        client dataout(tftype getText());

  tftype setText( );                           

  public void keyTyped(KeyEvent e)            

  public void keyReleased(KeyEvent e)                        

cha138/Article/program/Java/hx/201311/26868

相关参考

知识大全 Java网络编程-Java Socket编程(一)

Java网络编程-JavaSocket编程(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java网络编程-Java Socket编程(二)

Java网络编程-JavaSocket编程(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java网络编程-Java Socket编程(四)

Java网络编程-JavaSocket编程(四)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java网络编程-Java Socket编程(三)

Java网络编程-JavaSocket编程(三)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!li

知识大全 利用Socket进行Java网络编程(三)

利用Socket进行Java网络编程(三)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作者郗

知识大全 利用Socket进行Java网络编程(二)

利用Socket进行Java网络编程(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作者郗

知识大全 利用Socket进行Java网络编程(一)

利用Socket进行Java网络编程(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作者郗

知识大全 基于Socket的Java网络编程集粹

基于Socket的Java网络编程集粹  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!其实简单的分析

知识大全 Java网络编程基础(二) Socket类的使用方法

Java网络编程基础(二)Socket类的使用方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Java多线程Socket操作猜数游戏样例

Java多线程Socket操作猜数游戏样例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  服务器