请教一个服务器端和客户端连接的问题,多谢!

zychere 2012-06-29 09:44:11
服务器端代码:

import java.net.* ;
import java.io.* ;
public class EchoServer{
public static void main(String args[]) throws Exception { // 所有异常抛出
ServerSocket server = null ; // 定义ServerSocket类
Socket client = null ; // 表示客 户端
BufferedReader buf = null ; // 接收输入流
PrintStream out = null ; // 打印流输出最方便
server = new ServerSocket(8888) ; // 服务器在8888端口上监听
boolean f = true ; // 定义个标记位
while(f){
System.out.println("服务器运行,等待客户端连接。") ;
client = server.accept() ; // 得到连接,程序进入到阻塞状态
out = new PrintStream(client.getOutputStream()) ;
// 准备接收客户端的输入信息
buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ;
boolean flag = true ; // 标志位,表示可以一直接收并回应信息
while(flag){
String str = buf.readLine() ; // 接收客户端发送的内容
if(str==null||"".equals(str)){ // 表示没有内容
flag = false ; // 退出循环
}else{
if("bye".equals(str)){ // 如果输入的内容为bye表示结束
flag = false ;
}else{
out.println("ECHO : " + str) ; // 回应信息
}
}
}
client.close() ;
}
server.close() ;
}
};


客户端代码:

import java.net.* ;
import java.io.* ;
public class EchoClient{
public static void main(String args[]) throws Exception { // 所有异常抛出
Socket client = null ; // 表示客 户端
client = new Socket("localhost",8888) ;
BufferedReader buf = null ; // 一次性接收完成
PrintStream out = null ; // 发送数据
BufferedReader input = null ; // 接收键盘数据
input = new BufferedReader(new InputStreamReader(System.in)) ;
buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ;
out = new PrintStream(client.getOutputStream()) ; boolean flag = true ; // 定义标志位
while(flag){
System.out.print("输入信息:") ;
String str = input.readLine() ; // 接收键盘的输入信息
out.println(str) ;
if("bye".equals(str)){
flag = false ;
}else{
String echo = buf.readLine() ; // 接收返回结果
System.out.println(echo) ; // 输出回应信息
}
}
buf.close() ;
client.close() ;
}
};


问题:现在服务器端将键盘输入的内容发送到服务器的代码是“out = new PrintStream(client.getOutputStream()) ”这里有个问题:PrintStream括号里不应该是发送的位置么,应该是发送到服务器上,可是这个不还是发送到客户端么?
服务器端也有这个代码“out = new PrintStream(client.getOutputStream()) ”,这个是向客户端发送信息,没错吧?
...全文
64 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wgj200123 2012-06-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

谁能解释下client.getInputStream()的作用?谢谢
[/Quote]

得倒套接字的输入流,你可以这样想象:套接字就是客户端和服务的的一跟管道,得倒了套接字的输入流后,你就可以向管道拿东西,而另一端则通过client.getOutputStream()获取套接字的输出流,向里面写东西!
zychere 2012-06-30
  • 打赏
  • 举报
回复
谁能解释下client.getOutputStream()?谢谢
zychere 2012-06-30
  • 打赏
  • 举报
回复
谁能解释下client.getInputStream()的作用?谢谢
外面在下雷 2012-06-29
  • 打赏
  • 举报
回复
是这样的

首先 服务器要先启动 开启侦听 等待客服端发送数据
然后 客服端连接上服务器指定的端口上发送数据 数据是发送到你指定的端口上的绑定者接受
高速缓存会给客服端随机分配一个端口 当服务器发送消息过去的时候 就是发送到这个端口上
所以不会发生端口冲突 不是指定的端口绑定程序也不能读到缓存中的数据

62,614

社区成员

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

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