| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 416 人关注过本帖
标题:[求助]刚学的,请指点错误再哪?
只看楼主 加入收藏
zybin
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-8-15
收藏
 问题点数:0 回复次数:5 
[求助]刚学的,请指点错误再哪?
我已经改了几个地方了 ,还是有问题。请指点了,谢谢!(服务器端程序)
import java.io.*;
import java.net.*;
public class ServerTest
{ ServerTest()
{
try
{
boolean flag = true;
Socket links = null;
ServerSocket myServer=new ServerSocket(800);
System.out.println("Server listen on:"+myServer.getLocalPort());
while(flag)
{
links = myServer.accept();
FirstThread First =new FirstThread(links);
First.start();
SecondThread Second = new SecondThread(links);
Second.start();

}
}
catch (IOException e)
{
System.out.println("ServerException"+e);
}
}
public static void main(String[] args)
{
new ServerTest();
}
}
class FirstThread extends Thread //读入
{
Socket linkSocket;
String inputLine;
public FirstThread(Socket ls)
{
linkSocket = ls;
}

public void run()
{
try
{
DataInputStream dis = new DataInputStream(new BufferedInputStream(linkSocket.getInputStream()));
//获得从Client读入的数据流
inputLine = dis.readLine();//从Client读入信息
while(!inputLine.equals("Bye"))
{
System.out.println("Client端输入的信息为:"+inputLine);
inputLine = dis.readLine();
}
dis.close();
linkSocket.close();

}

catch (IOException e)
{
System.out.println("SeverException"+e);
}
}
}
class SecondThread extends Thread //输出
{ Socket linkSocket;
String line="";
public SecondThread(Socket ls)
{
linkSocket = ls;
}
public void run()
{
try
{
PrintWriter os = new PrintWriter(linkSocket.getOutputStream());
//获得向Client输出的数据流
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

os.println("Hello! Wellcome connect to myserver!");
os.flush();//向Client端输出信息
line = in.readLine();
while(!line.equals("Bye"))
{
os.println(line);
line = in.readLine();
}
os.close();
linkSocket.close();
}

catch (IOException e)
{
System.out.println("SeverException"+e);
}
}
}
2007-11-01 09:24
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
首先你用了几个过时的方法

DataInputStream的readLine方法,如果你想读行的话,最好是用BufferedReader

但是你两个线程去做一个socket做动作就不太好了

可惜不是你,陪我到最后
2007-11-01 10:47
zybin
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-8-15
收藏
得分:0 
回复:(千里冰封)首先你用了几个过时的方法DataInpu...
谢谢你!
两个线程去做一个socket做动作不好,应该怎么做呢?告诉思路就行了。
我看了几个类似的程序,好像是这样的。

2007-11-01 10:58
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
用一个线程去处理一个连接就可以了,输入输出流一起处理.这样才能保证你关了socket就真的关了,否则就会出现,你在输入流里面把socket关了,你另一个线程还在处理那个socket输出流

可惜不是你,陪我到最后
2007-11-01 11:13
zybin
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-8-15
收藏
得分:0 
回复:(千里冰封)用一个线程去处理一个连接就可以了...
是,知道了。这样socket是会有问题了。
我想,是不是可以用两个socket,一个输入 一个输出。
要是只用一个线程,客户端也用一个线程(输入输出在一起),岂不是冲突了呀。一般用java编写一对一的聊天程序的思路是什么呢?请指教,谢谢

[此贴子已经被作者于2007-11-1 16:33:17编辑过]


2007-11-01 16:30
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
一般是一个socket一个线程,因为socket既可以输入也可以输出啊

可惜不是你,陪我到最后
2007-11-01 18:48
快速回复:[求助]刚学的,请指点错误再哪?
数据加载中...
 
   



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

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