| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 665 人关注过本帖
标题:Java socke 编程问题,求解答
只看楼主 加入收藏
magicnian
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-4-7
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:8 
Java socke 编程问题,求解答
我想实现多个客户端和一个服务端之间的互相传送报文,现在只做到了客户端向服务端传送,不能双向传送,求解怎么才能做到双向发送报文
搜索更多相关主题的帖子: 服务端 客户端 Java 
2014-07-30 13:38
magicnian
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-4-7
收藏
得分:0 
我给上我现在写的代码,看看哪里能做修改,下面的是服务端的代码
程序代码:
package beta;
import *;
import *;
class ServerThreadCode extends Thread 

{
       //客户端的socket
       private Socket clientSocket;
       //IO句柄
       private BufferedReader sin;
       private PrintWriter sout;    
       //默认的构造函数
       public ServerThreadCode()
       {}  
       public ServerThreadCode(Socket s) throws IOException 
       {
              clientSocket = s;            
              //初始化sin和sout的句柄
              sin = new BufferedReader(new InputStreamReader(clientSocket
                            .getInputStream()));
        sout = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
                            clientSocket.getOutputStream())), true);             
              //开启线程
              start(); 
       }
       //线程执行的主体函数
       public void run() 
       {
              try 
              {
                     //用循环来监听通讯内容
                     for(;;) 
                     {
                String str = sin.readLine();
                            //如果接收到的是byebye,退出本次通讯
                            if (str.equals("byebye"))
                            {     
                                   break;
                            }     
                            System.out.println("In Server reveived the info: " + str);
                            sout.println(str);
                     }
                     //System.out.println("closing the server socket!");
              } 
        catch (IOException e) 
              {
                     e.printStackTrace();
              } 
              finally 
              {
                     //System.out.println("close the Server socket and the io.");
                     try 
            {
                            clientSocket.close();
                     } 
                     catch (IOException e) 
                     {
                            e.printStackTrace();
                     }
              }
       }
}
public class ThreadServer {
     //端口号
    static final int portNo = 3333;
    public static void main(String[] args) throws IOException 
    {
           //服务器端的socket
           ServerSocket s = new ServerSocket(portNo);
           System.out.println("The Server is start: " + s);      
           try 
           {
                  for(;;)                          
                  {
               //阻塞,直到有客户端连接
                         Socket socket = s.accept();
                         //通过构造函数,启动线程
                     new ServerThreadCode(socket);
                  }
           }
        finally 
           {
                  s.close();
           }
    }
}

2014-07-30 13:40
magicnian
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-4-7
收藏
得分:0 
客户端的代码
程序代码:
package beta;
import *;
import *;
class ClientThreadCode extends Thread 
{
  //客户端的socket
  private Socket socket;    
  //线程统计数,用来给线程编号
  private static int cnt = 0;
  private int clientId = ++cnt;
  private BufferedReader in;
  private PrintWriter out;
  //构造函数
  public ClientThreadCode(InetAddress addr) 
  {
    try 
    {
      socket = new Socket(addr, 3333);
    }
    catch(IOException e) 
    {
          e.printStackTrace();
    }
    //实例化IO对象
try 
    {    
      in = new BufferedReader(
             new InputStreamReader(socket.getInputStream()));    
       out = new PrintWriter(
               new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
        //开启线程
        start();
     } 
     catch(IOException e) 
     {
        //出现异常,关闭socket 
          try 
          {
            socket.close();
        } 
          catch(IOException e2) 
          {
              e2.printStackTrace();       
          }
     }
  }  
  //线程主体方法
public void run() 
  {
    try 
    {
      out.println("35|000"+clientId+"|clienta"+clientId+"|00"+clientId+clientId+"|2014-07-30-10-00-00 ");
      String str = in.readLine();
      System.out.println(str);
      out.println("byebye");
    } 
    catch(IOException e) 
    {
       e.printStackTrace();  
    }
    finally 
    {
      try 
      {
        socket.close();
      } 
      catch(IOException e) 
      {
              e.printStackTrace();
      }    
    }
  }
}
public class ThreadClient {
     public static void main(String[] args) 
     throws IOException, InterruptedException 

 {
   int threadNo = 0;
      InetAddress addr = 
      InetAddress.getByName("localhost");
   for(threadNo = 0;threadNo<2;threadNo++)
   {
      new ClientThreadCode(addr);
   }

 }
}
2014-07-30 13:40
magicnian
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-4-7
收藏
得分:0 
求大神解答,我是刚开始学习socket的,实习给的一个小项目
2014-07-30 13:41
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:14 
搞清楚原理就好实现了

我不是砖家,要努力成为砖家。
2014-07-30 14:13
magicnian
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-4-7
收藏
得分:0 
具体想要实现的是:有四个客户端:1,2,3,4,一个服务端p。
1向p传送报文,p通过对报文内容的判断传送给3或4,然后3或4返回一段新报文给p,p再传送给1.
2同理,只是报文格式不同。
1和p之间是同步短连接,p和3,4间是同步长连接。
现在主要是这个先后顺序不好解决,怎么才能做到,1-->p-->3,4-->p-->1  呢?
2014-07-30 14:48
magicnian
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-4-7
收藏
得分:0 
我有个想法,就是在实现了多个客户端和一个服务端互相传送报文的基础上,能不能通过线程控制实现先后顺序呢?比如说一个线程用来控制1<-->p,一个用来控制p<-->3,4,其余的同理,但是又有个问题,线程的先后顺序不好搞定……
2014-07-30 14:51
magicnian
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-4-7
收藏
得分:0 
回复 5 楼 砖家的谎言
看下我下面的想法,能提供点意见吗
2014-07-30 14:51
magicnian
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-4-7
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 magicnian 于 2014-7-30 14:59 编辑 ]
2014-07-30 14:56
快速回复:Java socke 编程问题,求解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018063 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved