网络通信是通过网络将各个孤立的设备进行连接,通过信息交换实现人与人,人与计算机,计算机与计算机之间的通信。其中网络通信协议在网络通信中扮演着重要的角色,现如今网络协议有很多,但常用的是TCP/IP协议。
网络通信协议就像两个人互相说话一样,双方要听得懂对方在讲什么,就好比和中国人讲话要用中文和日本人讲话要用日语,同理当我们在国际会议上发表演讲时,因为可能会有各个国家的人为了能让大家都懂,所以我们选择英语来作为国际语言,这样大家就都能听懂互相在讲什么,当然语言本身就是一种通信协议。如下图所示,只要用一样的语言(网络通信协议)
TCP协议:传输控制协议
1.使用TCP协议前,须先建立TCP连接,形成传输数据通道
2.使用前,采用“三次握手”方式,使用后,采用“四次挥手”方式,是可靠的(这是由系统执行的)
3.TCP协议进行通信的两个应用进程:客户端、服务端
4.在连接中可进行大数据量的传输
4.传输完毕,需释放已建立的连接,效率低
基于Socket的TCP编程介绍
TCP 字节流传输
public class SocketClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost",13000);
OutputStream os = socket.getOutputStream();
os.write("hello,server,你好".getBytes());
//BufferedWriter bw = new BufferedWriter();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class SocketServer {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(13000);
System.out.println("等来Client连接");
Socket socket = ss.accept();
System.out.println("连接成功!");
InputStream is = socket.getInputStream();
byte[] length = new byte[1024];
int len = 0;
while((len=is.read(length)) != -1) {
System.out.print(new String(length,0,len));
}
int readData = 0;
while((readData=is.read()) != -1) {
System.out.print((char)readData);
}
is.close();
socket.close();
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
TCP字符流传输
public class SocketServer {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(13000);
System.out.println("等来Client连接");
Socket socket = ss.accept();
System.out.println("连接成功!");
InputStream is = socket.getInputStream();
//使用字符流,使用InputStramReader 将 inputstream 转换成字符流
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
String s = bufferedReader.readLine();
System.out.println(s);//输出
bufferedReader.close();
is.close();
socket.close();
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class SocketClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost",13000);
OutputStream os = socket.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(os));
bufferedWriter.write("hello,world!;你好,世界!");
bufferedWriter.newLine();//插入一个换行符,表示写入内容结束,对方也要使用readLine
bufferedWriter.flush();//使用字符流,需要手动刷新,否则数据不会写入数据通道
os.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}