关于socket的问题

s303251680 2010-04-21 10:39:41
各位老师请教个关于Socket实现双向通信的问题,直接贴代码吧
server端:

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

class TalkServer
{
public static void main(String[] args) {
try
{
ServerSocket server = new ServerSocket(5000);
while (true)
{
Socket client = server.accept();
PrintWriter pw = new PrintWriter(client.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println("hha");
pw.write("server已通过你的连接");
pw.flush();
System.out.println("haha");
/*System.out.println(br.readLine());
System.out.println("haha");
br.close();*/ //这段内容注释掉程序运行完全正常,只有这段话启用了server和client就一直傻傻的等待
pw.close();
client.close();
}
}
catch (IOException e)
{
System.out.println("error:" + e);
}

}
}

client端:

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

class TalkClient
{
public static void main(String[] args) {
try
{
Socket client = new Socket("localhost",5000);
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));

PrintWriter pw = new PrintWriter(client.getOutputStream());
System.out.println("hhah");
System.out.println(br.readLine());
System.out.println("haha");
pw.write("你好server");
pw.flush();
pw.close();

br.close();
client.close();
}
catch (IOException e)
{
System.out.println("error:" + e);
}

}
}

ctrl+c后打印的信息是:
D:\java\socket>java TalkServer
hha
haha
error:java.net.SocketException: Connection reset

这应该是属于哪里的问题呢
...全文
90 10 打赏 收藏 转发到动态 举报
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bawgiitx 2010-04-21
  • 打赏
  • 举报
回复

///代码没问题,少了个回车符,代表一行的结束是回车符
import java.net.*;
import java.io.*;

class TalkServer {

public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(5000);
while (true) {
Socket client = server.accept();
PrintWriter pw = new PrintWriter(client.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println("hha");
pw.write("server已通过你的连接\n");///////这里加个回车,分行
pw.flush();
System.out.println("haha");
System.out.println(br.readLine());
System.out.println("haha");
br.close(); //这段内容注释掉程序运行完全正常,只有这段话启用了server和client就一直傻傻的等待
pw.close();
client.close();
// server.close();
}
} catch (IOException e) {
System.out.println("error:" + e);
}

}
}



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

class TalkClient {

public static void main(String[] args) {
try {
Socket client = new Socket("localhost", 5000);
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));

PrintWriter pw = new PrintWriter(client.getOutputStream());
System.out.println("hhah");
System.out.println(br.readLine());
System.out.println("haha");
pw.write("你好server\n");///////这里加个回车,分行
pw.flush();
pw.close();

br.close();
client.close();
} catch (IOException e) {
System.out.println("error:" + e);
}

}
}

soli11722984 2010-04-21
  • 打赏
  • 举报
回复
BufferedReader.readLine()
BufferedWriter.newLine()
这个2个才是,上面的方法名记错了
s303251680 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 soli11722984 的回复:]
我知道你意思,你现在是因为2边都在互相等待对面发信息过来,就互相阻塞了,所以

//这段内容注释掉程序运行完全正常,只有这段话启用了server和client就一直傻傻的等待

就这样,只要有个明确的信息说,读完了,就会继续往下走了
[/Quote]
就这样,只要有个明确的信息说,读完了,就会继续往下走了 怎么实现的啊
soli11722984 2010-04-21
  • 打赏
  • 举报
回复
我知道你意思,你现在是因为2边都在互相等待对面发信息过来,就互相阻塞了,所以

//这段内容注释掉程序运行完全正常,只有这段话启用了server和client就一直傻傻的等待

就这样,只要有个明确的信息说,读完了,就会继续往下走了
s303251680 2010-04-21
  • 打赏
  • 举报
回复
哥哥,哪来的writeLine方法啊
s303251680 2010-04-21
  • 打赏
  • 举报
回复
你手好快,我试下,这个是单向的可以,双向的就不行了
soli11722984 2010-04-21
  • 打赏
  • 举报
回复
试下换readLine和writeLine
s303251680 2010-04-21
  • 打赏
  • 举报
回复
以后用printwriter就用用println方法了,错不了
s303251680 2010-04-21
  • 打赏
  • 举报
回复
恩,可以了,问下啊为什么一定要加\n呢

我用println和print也分别试了,不管是在哪里换行,只要换行就行了,是不是用print流就一定要换行的
liujun3512159 2010-04-21
  • 打赏
  • 举报
回复
呵呵,路过
相关推荐

62,567

社区成员

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