笔者今天写socket通讯时发现read方法会出现阻塞,查找资料后终于找到了原因,在此记录下载,希望能帮到其他的朋友,也避免自己以后再犯这个错误
socket通讯有用字节流的,有用字符流的,字符流是对字节流的包装,
字节流:
服务端
package bybyte;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9999);
//此方法在没有客户端连接时会一直处于阻塞状态
Socket socket = serverSocket.accept();
InputStream is =socket.getInputStream();
OutputStream os = socket.getOutputStream();
//读数据
byte[]
readbuf = new byte[1024];
StringBuilder stringBuilde
r = new StringBuilder();
int len = is.read(readbuf);
while(len!=-1)
{
stringBuilder.append(new String(readbuf,0,len));
len = is.read();
}
System.out.println("message from client:"+stringBuilder.toString());
//写数据
os.write("Hello,client".getBytes());
os.flush();
//shutdownOutput会