java网络编程

概述

1.计算机网络

计算机网络指的是分布在不同区域的计算机,通过硬件等网络设备使用通信线路互相连接形成的一个网格系统,它可以很方便的进行信息的传递和资源的共享。

2.网络通信协议

网络通信协议是是为了给不同操作系统和不同硬件体系结构的互联网络提供通信支持,它是一种网络通用语言,是计算机与计算机之间交流的标准。常用的网络通信协议有:
1.http协议:超文本传输协议(80端口号)
2.https协议:安全的超文本传输协议(443端口号)
3.ftp协议:文件传输协议(21端口号)
4.TCP协议:传输控制协议
5.UDP协议:数据报协议

3.网络编程分类

1.B/S程序:浏览器与服务器程序
2.C/S程序:客户端与服务端程序

OSI参考模型

OSI(Open System Interconnection)是国际标准化组织(ISO)制定的用于计算机或通信系统间互联的体系标准,一般称为OSI参考模型或七层模型,它分为七层:应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。

TCP/IP协议

TCP/IP协议中就只有四个层次,应用层、传输层、网络层、网络接口层。TCP协议在客户端与服务端连接时存在三次握手的操作,确保消息发送的准确。
第一次握手:客户端向服务端发送连接请求,等待服务端确认。
第二次握手:服务端向客户端发送一个响应,通知客户端接收到了连接请求。
第三次握手:客户端再次向服务器发送确认消息,确认连接。
在进行三次握手的操作后,数据传输就已经建立,客户端和服务端就可以进行数据的传输了。当数据传输完成后,客户端就要与服务端进行断开连接,就存在四次挥手的操作。
第一次挥手:客户端发送请求关闭数据,客户端等待服务端确认。
第二次挥手:服务端接收到请求后,发送确认消息,服务端等待关闭。
第三次挥手:服务端发送关闭消息,进入关闭状态。
第四次挥手:客户端接收到消息后,进入等待关闭状态,接着发送消息服务端,服务端关闭,完成四次挥手。

java网络编程

ServerSocket

用于创建服务器,创建完毕后,会绑定一个端口号,然后此服务器等待客户端连接,每连接一个客户端,服务端就会得到一个新的Socket对象,用于跟客户端进行通信。
构造方法:ServerSocket(int port);
作用:创建一个基于TCP/IP协议的服务器,并绑定指定的端口号。参数port的范围是:0-65535.
常用方法:Socket accept();
作用:等待客户端连接,此方法会导致线程的阻塞,知道一个客户端连接成功,return Socket对象后,线程才继续执行。
常用方法:void close();
作用:释放占用的端口,关闭服务器。

Socket

Socket是两台计算机之间通信的端点,是网络驱动提供给应用程序编程的一种接口。
构造方法:Socket(String ip,int port);作用:创建一个套接字,并连接指定的ip和端口号的服务器。
参数1:服务器的ip地址
参数2:服务器软件的端口号.
常用方法:OutputStream getOutputStream();
作用:指向通信的另一端的输出流。
常用方法:InputStream getInputStream();
作用:指向通信的另一端的输入流。
常用方法:void close();
作用:关闭套接字。
在网络编程时,获取输入输出流的操作对于客户端和服务端来说是相对的,客户端的输入流输入的是服务端的输出流输出的内容;客户端输出流输出的内容是服务端输入流输入。

网络编程示例

//服务端
public static void main(String[] argv){
	//1.启动服务器,监听8888端口号
	ServerSocket server = new ServerSocket(8888);
	//2.提示
	System.out.println("服务器已启动,等待客户端连接...");
	//3.等待客户端连接,客户端连接成功,提示
	Socket socket = server.accept();
	System.out.println("客户端连接成功");
	//4.获取输出流,将输出的字节流转换成打印流
	 OutputStream os = Socket.getOutputStream();
 	 PrintStream ps = new PrintStreamReader(os);
 	 ps.println("欢迎连接服务器")//5.获取输入流,将输入的字节流转换成字符流,并将字符流转换成逐行读取流
 	 InputStream is = new InputStream();
 	 InputStreamReader isr = new InputStreamReader(is);
	 BufferedReader br = new BuferedReader(isr);
	 String text = br.readline();
	 System.out.println("服务器收道客户端回复:"+text);
	 System.out.println("服务器关闭")
}
```java
//客户端
public static void main(String[] argv){
	//连接服务器
	Socket socket = new Socket("127.0.0.1",8888);
	//得到输出流,将输出流转化成打印流
	InputStream is = socket.getInputStream();
	BufferedReader br = new BufferedReader(new InputStreamReader(is));
	String text = br.readLine();
	System.out.println("客户端收到消息:"+text);
	OutputStream os = socket.getOutputStream();
	PrintStream ps = new PrintStream(os);
	ps.println("你好");
}

上面的示例中,服务器和客户端是一对一连接的,当一个客户端连接服务器后,程序就会结束,在实际的开发中,一个服务器会有多个客户端进行连接,因此就要在服务器中加入多线程。由于时间关系,服务端加入多线程的示例在后面添加上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值