java socket编程,希望高手帮忙,马上结贴!

Jamesczh 2004-04-22 11:41:10
Socket编程问题

服务器端Server.java源文件如下:
import java.net.*;
import java.io.*;

public class Server
{
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;

public Server()
{
try
{
ss = new ServerSocket(10000);

while (true)
{
socket = ss.accept();
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

String line = in.readLine();
System.out.println("you input is :" + line);
in.close();
socket.close();
ss.close();
}

}
catch (IOException e)
{}
}

public static void main(String[] args)
{
new Server();
}
}

客户端Client.java代码如下:

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

public class Client
{
Socket socket;
BufferedReader in;
PrintWriter out;

public Client()
{
try
{
socket = new Socket("172.18.0.190", 10000);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));

System.out.println(line.readLine());
line.close();
in.close();
socket.close();
}
catch (IOException e)
{
System.out.println(e.getMessage());
}
}

public static void main(String[] args)
{
new Client();
}
}

编译都没有问题,可是我在客户端输入一个任意字符串,服务器端
String line = in.readLine();这句从缓冲区读出来的是空的。怎么回事?哪位兄弟能给帮个忙?

我对它的原理是这样理解的:
首先服务端建立一个监听,然后客户端根据服务器端IP和端口进行连接,连接成功之后,向服务器端的缓冲区发送一个字符串,服务器端读出缓冲区的字符串。然后清除掉缓冲区的数据,服务器端也向自己的缓冲区发送一个字符串,客户端读取服务器端的缓冲区字符串,整个交互过程完毕。
这个理解是不是有误??
...全文
53 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyxxxxx 2004-04-22
  • 打赏
  • 举报
回复
Sorry,刚才没注意。
你的服务器和客户方都只在读数据,客户方没把从控制台得到的数据写到服务器。
BufferWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write(data);
bw.flush();
qqbz 2004-04-22
  • 打赏
  • 举报
回复
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));

System.out.println(line.readLine());
line.close();
in.close();
socket.close();
以上语句中哪里有发送到服务器的代码?
服务器当然收不到!
Jamesczh 2004-04-22
  • 打赏
  • 举报
回复
to flyxxxxx(空指针):
line没有flush这个方法啊!
flyxxxxx 2004-04-22
  • 打赏
  • 举报
回复
客户端半闭连接前加入一行
line.flush();
没此行,数据是不发到输出流的。

62,614

社区成员

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

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