socket基本通信

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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值