socket 编程有点含糊

yyy6210 2009-11-10 10:28:05
假如现在有个server 和几个客户端,建立socket通信,

请问,什么情况下用输入流,什么情况下是输出流,相对于客户端和server端来说,搞不清楚,有没有什么好的办法,分清楚,谢谢!

socket ss

ss.getInputStream().read
ss.getOutputStream().write
...全文
187 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dickli1986 2009-12-17
  • 打赏
  • 举报
回复
这个的输入、输出和服务器端还是客户端没什么关系的,都是相对自己来说的,你要从外界读入信息就用输入流(inputstream.read),要向外界传输信息就用输出流(outputstream.write)
anly_hz 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yyy6210 的回复:]
我这里有这么个代码:

public class BThread extends Thread {

BThread (Socket s)
{    
workerSocket = s;
}


然后在run方法的一个循环体中,首先
public void run()
{
while(!isExit)
{
try
{  
  readlen = workerSocket .getInputStream().read(。。。。)
                            }


这里为什么用的是getInputStream().read,而不是getOutputStream().write

客户端,首先是接收,还是发送??



[/Quote]


这里是输入,write是输出的时候用的
客户端一般情况下是先发送请求,如果先接收就不叫客户端了
hzhxxx 2009-12-17
  • 打赏
  • 举报
回复
可以参考下列的例子
http://blog.csdn.net/hzhxxx/archive/2009/12/09/4970196.aspx

下列描述了JNSP(java network service platform)服务的部署和功能,如有不明白之处,自己查看源代码,我无力和没有太多时间回答太多的问题.
源代码一起提供,可以随意修改,发布,并商业化,但请保留作者的信息.为了技术的进步,请注意共享成就.

目前已经发布于:http://download.csdn.net/source/1885332;http://hzhxxx.download.csdn.net/
如果查看后有技术问题探讨和建议的,欢迎致电致信联系.系统架构设计和实现有如下特点:
A. 采用 Accept-Connect 通讯模型,能统一管理系统中使用的所有 Socket 资源;
B. 系统支持通信和协议分离的实现原则,支持自定义协议解析模块;通信负责数据收发,协议负责数据鉴别,两者配合实现通信和协议的和谐工作;
C. 灵活支持业务处理功能重定义,分级支持慢业务和快业务的不同业务处理线程;
D. 丰富灵活的配置参数,能满足高扩展性;
E. 配合业务处理和通信模型,能异步的管理所有的交互步骤;
F. 分布式服务设计和部署,实现动态(热拔插)的增加和较少业务服务器,减少乃至拒绝单点服务;
lsdb 2009-11-10
  • 打赏
  • 举报
回复
你要分清楚InputStream和OutputStream,这个是站在程序的角度来说输入和输出的
yyy6210 2009-11-10
  • 打赏
  • 举报
回复
我这里有这么个代码:

public class BThread extends Thread {

BThread (Socket s)
{
workerSocket = s;
}


然后在run方法的一个循环体中,首先
public void run()
{
while(!isExit)
{
try
{
readlen = workerSocket .getInputStream().read(。。。。)
}


这里为什么用的是getInputStream().read,而不是getOutputStream().write

客户端,首先是接收,还是发送??



阁楼上的伟哥 2009-11-10
  • 打赏
  • 举报
回复
楼上的代码 不错 楼主好好看看 不懂在问
dawei2310 2009-11-10
  • 打赏
  • 举报
回复
仔细研究一下下面的代码。
socket 有个服务器端 还有个客户端。
import java.io.DataInputStream;
import java.io.IOException;
import javax.microedition.io.Connection;
import javax.microedition.io.Connector;
import javax.microedition.io.ServerSocketConnection;
import javax.microedition.io.SocketConnection;
import javax.microedition.midlet.*;

/**
* Socket编程:服务器端
*
* @author mouyong
*/
public class ServerMidlet1 extends MIDlet {
public void startApp() {
ServerSocketConnection con=null;
try {
//服务器监听9999端口
con =(ServerSocketConnection) Connector.open("socket://:9999"); //open的参数是专门的格式来书写的
System.out.println("服务器IP:"+con.getLocalAddress());
System.out.println("服务器端口:"+con.getLocalPort());
//等待客户端连接
//如果没有连接,程序将在这里堵塞
//如果有连接,则返回SocketConnection,充当通信的桥梁
//之后,就可以通过sc进行通信
SocketConnection sc=(SocketConnection)con.acceptAndOpen();
System.out.println("客户端:"+sc.getAddress());

//接收客户端的输入
DataInputStream din=sc.openDataInputStream();
//readUTF()同样会出现堵塞
System.out.println("客户端说:"+din.readUTF());
} catch (IOException ex) {
ex.printStackTrace();
}
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}
}

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package lession18;

import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.io.SocketConnection;
import javax.microedition.midlet.*;

/**
* Socket编程:客户端
*
* @author mouyong
*/
public class ClientMidlet1 extends MIDlet {
public void startApp() {
try {
//客户端可以通过sc与服务器端通信
SocketConnection sc=(SocketConnection)Connector.open("socket://192.168.0.13:9999"); //连接到服务器端

//开始与服务器通信:送给服务器一个“你好!”
DataOutputStream dout= sc.openDataOutputStream();
dout.writeUTF("你好!");
} catch (IOException ex) {
ex.printStackTrace();
}
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}
}

62,630

社区成员

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

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