1.网络编程概述
在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换
1.2网络编程的三要素
1.2.1IP地址
必须为每台计算机指定一个标识号
1.2.2端口
IP地址可以唯一标识网络中的设备 ,那么端口号就可以唯一标识设备中的应用程序了。也就是应用程序的标识
1.2.3协议
通过计算机网络可以使多 台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守的规则
2.UDP通信程序
2.1UDP的通信原理
-
UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象, 但是这两个Socket只是发送,接收数据的对象因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
2.2UDP发送数据
发送数据的步骤
1、创建发送端的Socket对象(DatagramSocket):DatagramSocket()
2、创建数据, 并把数据打包:DatogramPacket (byte[] buf, int Length, InetAddress address, int port)
3、调用DatagramSocket对象的方法发送数据:void send(DatagramPacket p)
4、解析数据包, 并把数据在控制台显示:byte[] getData()
、int getLength()
5、关闭接收端:void close()
package test;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
//1、创建接收端的Socket对象(DatagramSocket):DatagramSocket(int port)
DatagramSocket ds = new DatagramSocket(10086);
//2、创建一个数据包, 用于接收数据
//DatagramPacket(byte[] buf, int length):构造一个DatagramPacket用来接收长度为length的数据包
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys, bys.length);
//3、调用DatagramSocket对象的方法接收数据:void receive(DatagramPacketp)
ds.receive(dp);
//4、解析数据包, 并把数据在控制台显示:
// byte[] getData():返回数据缓冲区 int getLength()
byte[] datas = dp.getData();
//int getlength():返回要发送的数据长度或接收的数据长度
int len = dp.getlength();
String dataString = new String(datas,0,len);
System.out.println("数据是:"+dataString);
//5、关闭接收端:void close()
ds.close();
}
}
发送端
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class SendDemo {
public static void main(String[] args) throws IOException {
//1、创建发送端的Socket对象(DatagramSocket):DatagramSocket()
DatagramSocket ds = new DatagramSocket();
//键盘录入数据
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = br.readLine()) != null) {
if ("886".equals(line)) {
break;
} else {
//创建数据并把数据打包
byte[] bys = line.getBytes();
DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("127.0.0.1"), 1001);
//3、调用DatagramSocket对象的方法发送数据:void send(DatagramPacket p)
ds.send(dp);
}
}
ds.close();
}
}
3 TCP通信程序
3.1 TCP通信原理
TCP通信协议是一种可靠的网络协议, 它在通信的两端名建立一个Socke对象, 从而在通信的两端形成网络虚拟链路
一旦建立了 虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信
Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生l0流来进行网络通信
Java为客户端提供了Socket类,为服务器端提供了ServerSocket类
3.2TCP发送数据
- 1、创建客户端的Socket对象(Socket):
Socket(String host, int port)
- 2、获取输出流,写数据:
OutputStream对象的getOutputStream()方法
- 3、释放资源:
void close()
package test;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class ClientDemo {
public static void main(String[] args) throws IOException {
//1、创建客户端的Socket对象(Socket):Socket(String host, int port)
Socket s = new Socket("127.0.0.1",1000);
//2、获取输出流,写数据:OutputStream对象的getOutputStream()方法
OutputStream os = s.getOutputStream();
os.write("hello,java".getBytes());
//3、释放资源:void close()
s.close();
}
}
3.3TCP接受数据
1、创建服务 器端的Socket对象(ServerSocket):ServerSocket(int port)
2、监听客户端连接, 返回个Socket对象:Socket accept()
3、获取输入流, 读数据,并把数据显示在控制台:InputStream对象的getInputStream()方法
4、释放资源:void close()
package test;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SeverDemo {
public static void main(String[] args) throws IOException {
//1、创建服务 器端的Socket对象(ServerSocket):ServerSocket(int port)
ServerSocket ss = new ServerSocket(1000);
//2、监听客户端连接, 返回个Socket对象:Socket accept()
Socket s = ss.accept();
//3、获取输入流, 读数据,并把数据显示在控制台:InputStream对象的getInputStream()方法
InputStream is = s.getInputStream();
byte[] bys = new byte[1014];
int len = is.read(bys);
String data = new String(bys,0,len);
System.out.println(data);
//4、释放资源:void close()
s.close();
ss.close();
}
}