网络编程
实现网络编程的三个要素:
使用IP地址(准确的定位网络上的一台或多台主机);
使用端口号(定位主机上的特定的应用);
使用网络通信协议(可靠,高效的传输数据);
IPv4地址:是一个32位的二进制数,4个字节,一般表示为十进制的数,例如192.168.12.12
在2011年基本用尽
IPv6地址:128位地址,16个字节,写成8个无符号整数,
例如CCCC:1555:1666:1444:1555:ABCD:CBDA:AC45
IP地址分两类:
公网地址(万维网 www.)和私有地址(局域网 192.168.开头)
实例化方式:
try {
//获取指定ip
InetAddress byName = InetAddress.getByName("192.168.23.165");
System.out.println(byName);
InetAddress inet2 = InetAddress.getByName("www.baidu.com");
System.out.println(inet2);
//获取本地ip
InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost);
} catch (UnknownHostException e) {
e.printStackTrace();
}
TCP协议:
-
两个通信进程:客户端,服务端
-
传输前,需要经过”三次握手“方式,点对点通信,是可靠的;
-
使用重发机制,就是当一个通信实体发送给另一个实体时,需要告知另一个实体确认信息,如果没有收到,还会重新发送刚才得信息
-
在连接中可以进行大数据量的传输
-
传输完毕,需释放已建立的连接,效率低
-
例如:打电话
UDP协议:
-
两个通信进程:发送端,接收端
-
将数据,源,目的封装成数据包(传输的基本单位),不需要建立连接
-
不可靠的
-
数据大小有限制 64k内
-
发送数据结束时,无需释放资源,开销小,效率高
-
使用场景:音频,视频和普通数据的传输,例如视频会议
-
例如:发短信,发电报
socket
tcp中客户端和服务端利用socket通信:
public class tcpClient {
@Test
public void client(){
OutputStream outputStream = null;
Socket socket = null;
try {
InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
int port = 8888;
socket = new Socket(inetAddress, port);
outputStream = socket.getOutputStream();
outputStream.write("我是小李".getBytes());
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Test
public void server(){
//这些都是要close的
Socket accept = null;
InputStream inputStream = null;
ServerSocket serverSocket = null;
//端口号
int port = 8888;
try {
serverSocket = new ServerSocket(port);
accept = serverSocket.accept();
System.out.println("我已经收到!");
inputStream = accept.getInputStream();
//规范这样写
byte[] bytes = new byte[1024];
int len;
while ((len = inputStream.read(bytes)) != -1){
String str = new String(bytes, 0, len);
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
accept.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//传输文件,互发信息,csdn上很多
udp是通过数据包(DatagramSocket)传输数据的
问题:
标签:socket,编程,网络,try,printStackTrace,IOException,catch,InetAddress From: https://www.cnblogs.com/jessi200/p/17203199.html