faint呀,我现在在每个线程里面创建一个socket。但就是 aa = ins.readChar(); //line 104; 这一行抛出异常: java.net.SocketException: Socket is closed at java.net.Socket.getInputStream(Socket.java:672) at dataexchange.ClientThread$SendDataThread.sendData(ClientThread.java:104) at dataexchange.ClientThread$SendDataThread.run(ClientThread.java:80)
我这样做的 接受的是xml文件 在每个线程里面 DataInputStream in; DataOutputStream out; m_clientSocket = socket; System.out.println("@@@:"+m_clientSocket); in = null; out = null; in = new DataInputStream(m_clientSocket.getInputStream()); out = new DataOutputStream(m_clientSocket.getOutputStream()); byte buffer[] = new byte[MaxPackSize]; int nread = 0; int r = 0; int readnum=in.read(buffer,0,MaxPackSize); ................................... 然后你对xml解析和处理
Socket clientSocket =new Socket(IP,port);
to : gzhua99(孤浪) ( ) 3ku,但是我还是看不明白你是怎么做的。 MaxPackSize 可以在client端得出并先发给server,但是,在处理xml文件的时候 是怎么处理的呢?in.read(buffer,0,MaxPackSize);返回的是一个int呀,jdom或者dom 或者sax都需要读入一个文件或者一个stream才能处理麽
你通过socket连接 客户端发送过来是用一个DataOutputStream output.write(sendstring.getBytes());发送过来的字节流 你的服务端 DataInputStream in读取socket里的字节流 int readnum=in.read(buffer,0,MaxPackSize); byte buffer[] = new byte[MaxPackSize]; 放在了buff里面啊,然后你把这个字节数组转化为你想要的格式 处理 然后向客户端发送返回信息就可以了
就是说你socket里面发送 接受的东西就是字节流 其他转换工作要你自己做的
byte转换成字符,数据等好麻烦的.为什么我启动400个线程时 Socket socket = new Socket(InetAddress.getByName("localhost"), clientPort); 这句话就报错.connect refused. 换成100个就ok.为什么呢?
而程序是要读完一行才往下走的!
你说不要用readline读取,那么用什么读取呢?需要读入的数据包含一个xml文件。谢谢各位。
我做了相应的调整之后,运行client以及server。但是,我将client的process关掉之后,
server居然还能一直在不停的读取数据,并且,打印出来的数据赫然在目。如果我不shut掉
server,它就一直不停的运行下去。faint,它是从哪儿read出来的数据呀~~~~。
而且,server发送char时,client端:
char aa=0;
aa = ins.readChar(); 还是堵塞在这儿
in.read(byte[],int off,int len)
in.read(byte[],int off,int len) 返回的是一个int。
我需要把数据取出来进行处理呢。
thank you!
http://community.csdn.net/Expert/topic/3116/3116338.xml?temp=.2916529
aa = ins.readChar(); //line 104;
这一行抛出异常:
java.net.SocketException: Socket is closed
at java.net.Socket.getInputStream(Socket.java:672)
at dataexchange.ClientThread$SendDataThread.sendData(ClientThread.java:104)
at dataexchange.ClientThread$SendDataThread.run(ClientThread.java:80)
我这样做的 接受的是xml文件 在每个线程里面
DataInputStream in;
DataOutputStream out;
m_clientSocket = socket;
System.out.println("@@@:"+m_clientSocket);
in = null;
out = null;
in = new DataInputStream(m_clientSocket.getInputStream());
out = new DataOutputStream(m_clientSocket.getOutputStream()); byte buffer[] = new byte[MaxPackSize];
int nread = 0;
int r = 0;
int readnum=in.read(buffer,0,MaxPackSize);
...................................
然后你对xml解析和处理
3ku,但是我还是看不明白你是怎么做的。
MaxPackSize 可以在client端得出并先发给server,但是,在处理xml文件的时候
是怎么处理的呢?in.read(buffer,0,MaxPackSize);返回的是一个int呀,jdom或者dom
或者sax都需要读入一个文件或者一个stream才能处理麽
output.write(sendstring.getBytes());发送过来的字节流
你的服务端 DataInputStream in读取socket里的字节流
int readnum=in.read(buffer,0,MaxPackSize);
byte buffer[] = new byte[MaxPackSize];
放在了buff里面啊,然后你把这个字节数组转化为你想要的格式
处理 然后向客户端发送返回信息就可以了
其他转换工作要你自己做的
Socket socket = new Socket(InetAddress.getByName("localhost"), clientPort);
这句话就报错.connect refused.
换成100个就ok.为什么呢?
2、server在client关闭后,读到的是网路缓冲中的dd。