I create an iOS server using GCDAsyncSocket and Client is created using Java language. When I sent data in form of NSDAta it can be read by SocketTester(application for testing client connection) but it cannot be completely read at java end .
static void recorderServerClient() throws IOException{
int port =9892;
clientSocket = new Socket("localhost", port);
System.out.print("Connected to localhost"+port);
while (true){
InputStream inputStream = clientSocket.getInputStream();
try {
Thread.sleep(3000);
}
catch (InterruptedException e) {
e.printStackTrace();
}/*fetch data with help of output stream and write it with help of PrintWriter */
PrintWriter printWriterObj = new PrintWriter(clientSocket.getOutputStream());
printWriterObj.println();
printWriterObj.flush();
/*created an array for now static and assign some memory */ byte[] buffer = new byte[1000000];
int read;
while((read = inputStream.read(buffer)) != -1) {
String output = new String(buffer, 0, read);
System.out.print(output);
System.out.flush();
}
}
*/
}
I want to get data length sent through ios server.and create buffer accordingly.Can any one help me out?
import java.io.*;
import java.net.Socket;
public class SocketDemo {
public static void main(String args[]) throws Exception {
Socket socket = new Socket("localhost", 2100);
System.out.println("Connected");
DataInputStream ins = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
System.out.println("opened OutputStreams");
System.out.println(readResponse(ins));
Thread.sleep(100);
out.write("ss 1\n".getBytes());//send command
out.flush();
System.out.println("sent command");
Thread.sleep(3000);//important to wait for the server to response
System.out.println(readResponse(ins));
socket.close();
System.out.println("Connection to the server closed");
}
private static String readResponse(InputStream in) throws IOException {
byte[] buf = new byte[1024];//1k
StringBuilder sb = new StringBuilder();
while (in.available() > 0) {//server is waiting for client once it sent all data
int pos = in.read(buf);
String s = new String(buf, 0, pos);
sb.append(s);
//System.out.println("reading data..." + pos + " s>>>" + s.getBytes() + "available?" + ins.available());
//System.out.print(pos + " ? " + (char) pos);
}
return sb.toString();
}
}
I solved this using
public static byte[] readChunkedData(final InputStream stream, final int size) throws IOException {
byte[] buffer = new byte[size];
DataInputStream din = new DataInputStream(stream);
din.readFully(buffer);
return buffer;
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.