1.服务端
while(true){
Socket socket = null;
socket = serverSocket.accept();
InputStream iStream = socket.getInputStream();
byte[] buff = new byte[1024];
int len = -1;
StringBuffer pp = new StringBuffer();
while((len = iStream.read(buff))!=-1){ //read 方法返回的是读到的字符数
pp.append(new String(buff,0,len)); //所以这里采用这种方式来做
}
System.out.println(pp.toString());
OutputStream oStream = socket.getOutputStream();
oStream.write("back".getBytes());
socket.shutdownOutput();
System.out.println(socket.isClosed());
socket.close();
}
要点:
1.两端通信的时候最好是采用同样的方式。
2.一端给另一端发信息的时候,最好采用 socket.shutdownOutput();这样另一端才会接受到,或者采用socket.close();
不过在服务器端,最好是采用socket.shutdownOutput(),因为这样不会关闭socket,socket的关闭给客户端来做,减少通信的开销。
如果一定要关闭服务端的socket,那么就放在finlly{}块中。
2.客户端
Socket socket = new Socket("127.0.0.1",9001);
OutputStream oStream = socket.getOutputStream();
oStream.write("abc".getBytes());
// oStream.close();
socket.shutdownOutput(); //最好是采用这种做法
System.out.println(socket.isClosed());
// oStream.flush();
// socket.shutdownOutput();
InputStream iStream = socket.getInputStream();
byte[] buff = new byte[1024];
int len = -1;
StringBuffer pp = new StringBuffer();
while((len = iStream.read(buff))!=-1){
pp.append(new String(buff,0,len)); //最好是采用这种方式
}
System.out.println(pp.toString());
socket.close();
一 注意的一点:在使用 PrintWriter && BufferedReader 的时候最好设置
PrintWriter pWriter = new PrintWriter(oStream,true); 设置为true 直接发送,不必等到缓冲区满
二 如果关闭了 OutputStream oStream = socket.getOutputStream();
oStream 也相当于关闭了socket.
使用 BufferedReader && PrintWriter
1.BufferedReader 通过
String msg = null;
while((msg=br.readLine())!=null){ //通过readLine来读取
System.out.println(msg);
pw.println(msg+"1111"); //通过pringln推送到另一端,而不是write()方法是写入到一个字符串中,不是发送到另一端
socket.shutdownOutput();
}
while(true){
Socket socket = null;
socket = serverSocket.accept();
InputStream iStream = socket.getInputStream();
byte[] buff = new byte[1024];
int len = -1;
StringBuffer pp = new StringBuffer();
while((len = iStream.read(buff))!=-1){ //read 方法返回的是读到的字符数
pp.append(new String(buff,0,len)); //所以这里采用这种方式来做
}
System.out.println(pp.toString());
OutputStream oStream = socket.getOutputStream();
oStream.write("back".getBytes());
socket.shutdownOutput();
System.out.println(socket.isClosed());
socket.close();
}
要点:
1.两端通信的时候最好是采用同样的方式。
2.一端给另一端发信息的时候,最好采用 socket.shutdownOutput();这样另一端才会接受到,或者采用socket.close();
不过在服务器端,最好是采用socket.shutdownOutput(),因为这样不会关闭socket,socket的关闭给客户端来做,减少通信的开销。
如果一定要关闭服务端的socket,那么就放在finlly{}块中。
2.客户端
Socket socket = new Socket("127.0.0.1",9001);
OutputStream oStream = socket.getOutputStream();
oStream.write("abc".getBytes());
// oStream.close();
socket.shutdownOutput(); //最好是采用这种做法
System.out.println(socket.isClosed());
// oStream.flush();
// socket.shutdownOutput();
InputStream iStream = socket.getInputStream();
byte[] buff = new byte[1024];
int len = -1;
StringBuffer pp = new StringBuffer();
while((len = iStream.read(buff))!=-1){
pp.append(new String(buff,0,len)); //最好是采用这种方式
}
System.out.println(pp.toString());
socket.close();
一 注意的一点:在使用 PrintWriter && BufferedReader 的时候最好设置
PrintWriter pWriter = new PrintWriter(oStream,true); 设置为true 直接发送,不必等到缓冲区满
二 如果关闭了 OutputStream oStream = socket.getOutputStream();
oStream 也相当于关闭了socket.
使用 BufferedReader && PrintWriter
1.BufferedReader 通过
String msg = null;
while((msg=br.readLine())!=null){ //通过readLine来读取
System.out.println(msg);
pw.println(msg+"1111"); //通过pringln推送到另一端,而不是write()方法是写入到一个字符串中,不是发送到另一端
socket.shutdownOutput();
}