网络编程三要素:
协议:TCP/IP , UDP
IP : 网络中每个主机的地址
IP地址:指互联网协议地址(Internet Protocol Address)
ipconfig:查看本机IP地址.
ping : 检查网络是否连通.
特殊的IP地址
- 本机IP地址: 127.0.0.1 localhost
127.0.0.1 localhost永远只会寻找本机,在哪个主机中就会找哪个主机。
端口:
端口就是应用程序的一个所谓“编号”
IP只能找到一个人的机器,端口才可以找到一个具体的应用程序。
端口号:用两个字节表示的整数,它的取值范围是0~65535
0~1023之间的端口号用于一些知名的网络服务和应用,
普通的应用程序需要使用1024以上的端口号。
如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败。
Socket网络编程(TCP通信):只要使用Socket进行网络编程,那么就是基于了TCP协议通信。
Socket:套接字,其实就是一个通信管道对象,通信是建立端到端的通信,Socket必须存在客户端和服务端两个角色。在通信之前,必须先启动服务端。
目标:客户端发送一个消息,服务端接收一个消息。
那接下来我们就去了解一下客户端怎么写?
客户端
研究Socket:
构造器:
a.public Socket(String host,int port)
方法:
public InputStream getInputStream();
public OutputStream getOutputStream();
开发步骤:
1.启动服务端。
2.客户端应该建立与服务端的Socket管道连接。
3.利用Socket管道进行通信。
public class SocketClient {
public static void main(String[] args) throws Exception {
// 1.启动服务端。
// 2.创建一个Socket与服务端进行连接
Socket socket = new Socket("192.168.67.82",9999);
// 3.从socket管道中得到一个字节输出流。
OutputStream os = socket.getOutputStream();
// 4.利用字节输出流往外写数据。
// 5.把字节输出流包装一个打印流
PrintStream ps = new PrintStream(os);
ps.println("itheima客户端发送了,我活着,Over!");
socket.close();
}
}
服务端:
ServerSocket: 构造器: a.public ServerSocket(int port) 方法: public InputStream getInputStream(); public OutputStream getOutputStream(); public Socket accept();接收一个Socket连接。
开发步骤:
1.服务端要先注册端口。
2.服务端需要通过ServerSocket接收客户端的Socket连接。
3.利用接收到的Socket管道进行通信。
public class SocketServer {
public static void main(String[] args) throws Exception {
System.out.println("--服务器启动成功!--");
// 1.注册端口:说明了服务端SocketServerDemo02的端口是9999
ServerSocket ss = new ServerSocket(9999);
// 2.接收客户端的Socket连接请求。
// 这行代码会在这里阻塞,等待客户端的连接。
Socket socket = ss.accept();
// 3.服务端要从Socket管道中得到一个字节输入流。
InputStream is = socket.getInputStream();
// 4.把字节输入流转换成字符输入流,再转换成高级缓冲字符输入流。
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 5.读取数据
String line = null ;
if((line = br.readLine())!=null){
System.out.println("服务端接收:"+line);
}
socket.close();
}
}
注意:
通信是非常严格的,客户端怎么发,服务端就怎么接收。
客户端发多少,服务端就只能收多少。
在通信的过程中,客户端和服务端就像一对的,只要一个死了,另一个就会报错。同时要也要注意客户端发一行,服务器也是接收一行。