Topic: 关于socket

  Print this page

1.关于socket Copy to clipboard
Posted by: terry39
Posted on: 2003-04-07 13:15

Socket socket=new Socket("127.0.0.1",6667);

DataInputStream in=new DataInputStream(socket.getInputStream());
DataOutputStream out=new DataOutputStream(socket.getOutputStream());

当使用 in.readUTf() 时 程序就停在此处一直等待服务器的信息

不能往下执行了

若我要同时 一边在 in.readUTF() 一边可以随时 out.writeUTF

如何实现? ... 在这里搜索了一写帖子 都没有类似于实现这个目的的 ..

2.Re:关于socket [Re: terry39] Copy to clipboard
Posted by: Jove
Posted on: 2003-04-07 13:20

那就用多线程吧
我写过一个p2p双机聊天软件,就是开Socket
一面写,一面读

3.我写的 就是用线程的 [Re: terry39] Copy to clipboard
Posted by: terry39
Posted on: 2003-04-07 15:49

/*
*这个试验的目的:
* 尝试在等待server的信息的时候 进行发送message
*/

import java.io.*;
import java.net.*;

public class LxdClient implements Runnable{
  private Socket client;
  private BufferedReader clientReader;
  private PrintWriter clientWriter;
  private DataOutputStream dos;
  private boolean enable;
  
  public LxdClient(){
    try{
      enable=false;
      client=new Socket("127.0.0.1",6667);
      clientReader=new BufferedReader(new InputStreamReader(client.getInputStream()));
      clientWriter=new PrintWriter(client.getOutputStream());
      dos=new DataOutputStream(client.getOutputStream());
    }catch(UnknownHostException ukhexp){}
     catch(IOException ioexp){}
    enable=true;
  }
  
  public void run(){
    String s;
    try{
      while(true){
        s=clientReader.readLine();
        if(s!=null) System.out.printlnMoon;
      }
    }catch(IOException ioexp){}
  }
  
  public void sendData(String s){
    try{
//      clientWriter.writeMoon;
//      clientWriter.flush();
      dos.writeUTFMoon;
    }catch(IOException ioexp){}

  }
  
  public boolean enable(){
    return enable;
  }
  
  public static void main(String[] args){
    System.out.println("new a LxdClient ...");
    LxdClient lxdsocket=new LxdClient();
    lxdsocket.run();
    System.out.println("send data ...");
    lxdsocket.sendData("What is this ???");
  }
}

始终不出现 send data ... 呀

4.Re:我写的 就是用线程的 [Re: terry39] Copy to clipboard
Posted by: Jove
Posted on: 2003-04-07 16:20

不是直接
new LxdClient().run()

这样的话,和implements Runnable没什么关系,还是单线程的
应该是
Thread thread=new Thread(new LxdClient());
thread.start();

5.Re:关于socket [Re: terry39] Copy to clipboard
Posted by: terry39
Posted on: 2003-04-07 16:34

这样的话 产生的是 隐含对象 new LxdClient()
我如何控制 LxdClient 的实例 以进行发送信息? (如何调用 sendData() 方法?)
我不太明白 ....

6.Re:关于socket [Re: terry39] Copy to clipboard
Posted by: Jove
Posted on: 2003-04-07 17:10

hehe, 发觉你挺可爱的
如果不要匿名变量,那就给个变量名嘛
LxdClient lxd=new LxdClient();
Thread thread=new Thread(lxd);
thread.start();
lxd.sendData(..);

7.thks [Re: terry39] Copy to clipboard
Posted by: terry39
Posted on: 2003-04-07 17:46

非常感谢 ...
我明白你的意思了 ...

implements Runnable 并非是写了一个能单独执行的线程
需要 Thread(...) 才能在程序里 创建一个线程 来执行 实现Runnable的类的对象

是不是这样理解? ....

我刚才试了一下 好象可以了 ...我再编写一个server来验证一下 ...
非常感谢 ....


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923