简单的SERVER CLIENT交流的小程序的疑问

tmhk123 2010-05-21 02:23:19
SERVER端:
import java.io.*;
import java.net.*;
import java.applet.Applet;
public class talkserver
{
public static void main(String args[])
{
try
{
ServerSocket server = null;
try
{
server = new ServerSocket(4700);
}catch(Exception e)
{
System.out.println("can not listen to:" + e);
}
Socket socket = null;
try
{
socket = server.accept();
}catch(Exception e)
{
System.out.println("Error:" + e);
}
String line;
BufferedReader is = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:" + is.readLine());
line = sin.readLine();
while (!line.equals("bye"))
{
os.println(line);
os.flush();
System.out.println("Server:" + line);
System.out.println("Client:" + is.readLine());
line = sin.readLine();
}

is.close();
os.close();
socket.close();
server.close();
}catch(Exception e)
{
System.out.println("Error" + e);
}
}
}



CLIENT端:
import java.io.*;
import java.net.*;
public class talkclient
{
public static void main(String args[])
{
try
{
Socket socket = new Socket("127.0.0.1",4700);
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String readline;
readline = sin.readLine();
while (!readline.equals("bye"))
{
os.println(readline);
os.flush();
System.out.println("Client:" + readline);
System.out.println("Server:" + is.readLine());
readline = sin.readLine();
}
os.close();
is.close();
socket.close();
}catch(Exception e)
{
System.out.println("Error" + e);
}
}
}
...全文
98 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
无聊司马 2010-05-24
  • 打赏
  • 举报
回复
先看看
回去再试试 是怎么回事
!!!
Mybeautiful 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tmhk123 的回复:]

谢谢楼上的 我想问SERVER端的输出流PrintWriter os = new PrintWriter(socket.getOutputStream());打印流套接在输出流上 依然是正常输出吗
[/Quote]

是的,这是封装了下OutputStream而已,

/**
* Creates a new PrintWriter, without automatic line flushing, from an
* existing OutputStream. This convenience constructor creates the
* necessary intermediate OutputStreamWriter, which will convert characters
* into bytes using the default character encoding.
*
* @param out An output stream
*
* @see java.io.OutputStreamWriter#OutputStreamWriter(java.io.OutputStream)
*/
public PrintWriter(OutputStream out) {
this(out, false);
}




罗嗦一下,所谓out,就是写出去的,就这个socket了而言,是通过OutputStream发数据给对方的。
tmhk123 2010-05-22
  • 打赏
  • 举报
回复
谢谢楼上的 我想问SERVER端的输出流PrintWriter os = new PrintWriter(socket.getOutputStream());打印流套接在输出流上 依然是正常输出吗
Mybeautiful 2010-05-21
  • 打赏
  • 举报
回复
贴个完整的,可以支持多客户端聊天的程序供楼主参考,
http://mybeautiful.javaeye.com/blog/659317
Mybeautiful 2010-05-21
  • 打赏
  • 举报
回复
1。 server 端先运行后, 会停在这句,
socket = server.accept();


2. 然后Client运行过Socket socket = new Socket("127.0.0.1",4700); 这句时。

3. Server端会继续。 这样Server端的这个socket就正好与Client端沟通。


楼主可以在Eclipse中调这两个程序看看,就明白了。


  • 打赏
  • 举报
回复
通过socket建立通信,服务器有个socket = server.accept();,如果没连接上就会抛出异常
然后你的这段代码就是你代码里互发消息和接受消息的核心了,建立连接之后消息都是在流里传递的
BufferedReader is = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:" + is.readLine());
eimhee 2010-05-21
  • 打赏
  • 举报
回复
程序是对的
服务端通过socket发送消息给客户端
客户段监听socket的到消息
tmhk123 2010-05-21
  • 打赏
  • 举报
回复
他们是怎么建立互相通话的通道的?没有看到一个OutputStream通向客户端(或服务端)SOCKET的通道啊?
程序是对的 可以运行

62,621

社区成员

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

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