怎么调用socket中run()的一个值

yanglu252 2010-03-29 07:47:04
我想在另外一个类中调用socket的子函数run()中一个变量的值。
这个怎么弄啊?
...全文
146 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharke118 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yanglu252 的回复:]
引用 10 楼 sharke118 的回复:
在writeUTF过后要调用 output.flush() 才能把字符串写进流里面 你看看 你的客户端是不是调用了这个函数 如果都对了的话 应该是有值的 但是listMsg 是String 类型的 只能存一条数据 你如果想把服务器收到的消息都存起来 就用 ……
我已经把output.writeUTF("Recive Second: " + list……
[/Quote]

你在本类里面调用有值没有喃?
yanglu252 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sharke118 的回复:]
在writeUTF过后要调用 output.flush() 才能把字符串写进流里面 你看看 你的客户端是不是调用了这个函数 如果都对了的话 应该是有值的 但是listMsg 是String 类型的 只能存一条数据 你如果想把服务器收到的消息都存起来 就用 ……
[/Quote] 我已经把output.writeUTF("Recive Second: " + listMsg + " \r\n Thx...");
注释掉了 我打印了一下,是有值的,就是不能把void run()中listMsg的值调出来。 我是要在另外一个类文件中调用listMsg的值。
sharke118 2010-03-30
  • 打赏
  • 举报
回复
output.writeUTF("Recive Second: " + listMsg + " \r\n Thx...");
在writeUTF过后要调用 output.flush() 才能把字符串写进流里面 你看看 你的客户端是不是调用了这个函数 如果都对了的话 listMsg 应该是有值的 但是listMsg 是String 类型的 只能存一条数据 你如果想把服务器收到的消息都存起来 就用 ArrayList<String>listMsg 这个吧
yanglu252 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 sharke118 的回复:]
引用 5 楼 sharke118 的回复:
创建一个全局变量 假设为var,在对var创建其相关的 get 和 set 方法 即:
getvar(){ retrun var; } setvar(var2){ this.var = var2; }
在你说的线程里面将你想调用的变量赋值给 setvar()函数,假设你想要调用的变量是var2 那么可以这样 setvar(var2),当你在另外一个……
[/Quote]
先谢谢了 我设的是public static。
sharke118 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sharke118 的回复:]
创建一个全局变量 假设为var,在对var创建其相关的 get 和 set 方法 即:
getvar(){ retrun var; } setvar(var2){ this.var = var2; }
在你说的线程里面将你想调用的变量赋值给 setvar()函数,假设你想要调用的变量是var2 那么可以这样 setvar(var2),当你在另外一个类里面想调用var2的值的时候,直接掉用ge……
[/Quote]

把上面那个var 全局变量设成 static 变量 试试
yanglu252 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sharke118 的回复:]
本类调用都有值 那就是你类间调用的问题嘛 本类有这个值 其他类调用这个值不成功 只能说是 类间调用出了问题赛
那怎么解决呢?其实就是在SSocket类里面调用有值 在该类的main里面调用没有值。
yanglu252 2010-03-30
  • 打赏
  • 举报
回复
那怎么解决呢?其实就是在SSocket类里面调用有值
sharke118 2010-03-30
  • 打赏
  • 举报
回复
本类调用都有值 那就是你类间调用的问题嘛 本类有这个值 其他类调用这个值不成功 只能说是 类间调用出了问题赛
yanglu252 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sharke118 的回复:]
引用 11 楼 yanglu252 的回复:
引用 10 楼 sharke118 的回复:
在writeUTF过后要调用 output.flush() 才能把字符串写进流里面 你看看 你的客户端是不是调用了这个函数 如果都对了的话 应该是有值的 但是listMsg 是String 类型的 只能存一条数据 你如果想把服务器收到的消息都存起来 就用 ……
我已经把output.writeUTF(……
[/Quote] 有的啊
yanglu252 2010-03-29
  • 打赏
  • 举报
回复
我要调用String listMsg 的值。第二个String listMsg 可以不要的。
yanglu252 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sharke118 的回复:]
你打印下线程里面的值看看 看是否有值 可以的话 帖代码看看
[/Quote]
package certification;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) {
Server manager = new Server();
manager.doListen();
}

public void doListen() {
ServerSocket server;
try {
server = new ServerSocket(9991);
while (true) {
Socket client = server.accept();
new Thread(new SSocket(client)).start();
}
} catch (IOException e) {
e.printStackTrace();
}

}

//服务器进程
class SSocket implements Runnable {

Socket client;

public SSocket(Socket client) {
this.client = client;
}

public void run() {
DataInputStream input;
DataOutputStream output;
try {
input = new DataInputStream(client.getInputStream());
output = new DataOutputStream(client.getOutputStream());
String listMsg = input.readUTF();
output.writeUTF("Recive: " + listMsg + " \r\n Thx...");
System.out.println("Recive: " + listMsg);
listMsg = input.readUTF();
output.writeUTF("Recive Second: " + listMsg + " \r\n Thx...");
System.out.println("Recive Second: " + listMsg);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
sharke118 2010-03-29
  • 打赏
  • 举报
回复
你打印下线程里面的值看看 看是否有值 可以的话 帖代码看看
yanglu252 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sharke118 的回复:]
创建一个全局变量 假设为var,在对var创建其相关的 get 和 set 方法 即:
getvar(){ retrun var; } setvar(var2){ this.var = var2; }
在你说的线程里面将你想调用的变量赋值给 setvar()函数,假设你想要调用的变量是var2 那么可以这样 setvar(var2),当你在另外一个类里面想调用var2的值的时候,直接掉用ge……
[/Quote]
这个方法是可以调用,只是为什么每次调用的变量的值还是null,不是线程里面的值呢?是不是线程结束了变量就恢复成null了?
sharke118 2010-03-29
  • 打赏
  • 举报
回复
创建一个全局变量 假设为var,在对var创建其相关的 get 和 set 方法 即:

getvar(){
retrun var;
}

setvar(var2){
this.var = var2;

}

在你说的线程里面将你想调用的变量赋值给 setvar()函数,假设你想要调用的变量是var2 那么可以这样 setvar(var2),当你在另外一个类里面想调用var2的值的时候,直接掉用getvar()这个方法就可以了
  • 打赏
  • 举报
回复
还是没看明白
yanglu252 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 config_man 的回复:]
子函数?


创建一个javabean,将函数中的变量用的属性代替。这样在另一个类中就可以访问了。
[/Quote]
javabean?没用过 是不是没明白我的意思啊 主要是变量怎么在另外一个类中调用?而这个变量是在线程中!!!
config_man 2010-03-29
  • 打赏
  • 举报
回复
子函数?


创建一个javabean,将函数中的变量用javabean的属性代替。这样在另一个类中就可以访问了。
  • 打赏
  • 举报
回复
没明白你在问什么!

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧