--------------- android培训、java培训、期待与您交流!---------------
package net.szpt;
import java.net.*;
import java.io.*;
public class TcpSocket {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(7564);
Socket s = ss.accept();
InputStream in = s.getInputStream();//
OutputStream out = s.getOutputStream();
String str = "hello Socket Server!!";
out.write(str.getBytes());
byte[] buf = new byte[1024];
int len =in.read(buf);
System.out.println(len);
System.out.println(new String(buf,0,len));
//System.out.println(in.read(buf, 0, str.length()));// 最多度1024个字节到buf数组中,也可能少于1024
in.close();// 关闭流的时候要注意顺序。因为流是建立在socket基础之上的。若先关闭Socket就没意义了。
out.close();
s.close();
ss.close();
}
}
总结:
1、
getInputStream()这个是从客服端得到的流,in.read(buf, 0, str.length())也是读取客服端的发来的内容,同样是阻塞的。
int len =in.read(buf);这个是阻塞的。就是等待客服端输入,要不输入,程序就停在这里了。
然后在windows CMD命令下自带的telnet命令加上IP地址,再加上端口号7564运行OK。并且先要启动服务端的程序。
2、这个程序运行之后在cmd命令下输入字符hello,发现hello还没有写完程序就结束了。这是因为in.read(buf);只要一读取到信息就马上传输数据了。所以程序还来不及读取完就结束了。这样可以用BufferedReader来包装,用readLine方法读取一行。
3、发现网络也是和各种流打交道:
输入\输出流-->字节流\字符流-->过滤流-->字符字节转换流等。只是多了一些和网络设备打交道的内容(IP地址,端口,协议)
--------------- android培训、java培训、期待与您交流!---------------