一组相互连接的计算机称为网络。
网络编程三要素:
IP地址:网络上的每一台计算机的唯一标识,两台计算机之间通信必备。
端口号:计算机中应用的标号(代表一个应用程序)有小范围0-65536.
通信协议:即通讯规则。包括UDP广播和TCP点对点链接。
三者的作用
IP+端口号可以实现通信,通信协议负责规定如何通信,IP找到设备,端口找到应用。
网络有一些参考模型,这里简单介绍两种。OSI参考模型,开放系统互联参考模型。分为应用层-表达层-会话层-传输层-网络层-数据链路层-物理层。还有TCP/IP参考模型,他把网络分为应用层-传输层-网际层和网络接口层。
之后还提到了IP分类,不再赘述。
IP地址类,这个类包含了一些获取IP、主机名等方法。
接下来是两种通信协议实现网络通信编程的方式:
1.TCP/IP协议:
使用Socket套接字,客户端使用Socket,服务器端使用ServerSocket。附例:
/**
*服务器端代码
*/
public class SeverDemo {
public static void main(String[] args) throws IOException {
// 接受
ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept();
InputStream is = s.getInputStream();
byte[] b = new byte[1024];
while (is.read() != -1) {
System.out.println(new String(b));
}
s.shutdownInput();
is.close();
s.close();
ss.close();
}
}
/**
*客户端代码
*/
public class Client {
public static void main(String[] args) throws IOException {
//发送
Socket t = new Socket("127.0.0.1",8888);
OutputStream os = t.getOutputStream();
os.write("hello".getBytes());
t.shutdownOutput();
os.close();
t.close();
}
}
2.UDP通信:
使用DatagramSocket。UDP不分客户端和服务器,因为每个都既是服务器也是客户端。
public class UDPDemo1 {
public static void main(String[] args) throws IOException {
//发送信息
//new一个仓库-DatagramSocket
DatagramSocket ds = new DatagramSocket(8888);
// 要有货
String s = "你好中国1";
// 要有车
DatagramPacket dpf = new DatagramPacket(s.getBytes(), s.getBytes().length, InetAddress.getByName("127.0.0.1"),
8988);
ds.send(dpf);
//接受返回信息
// 要有装货的小三轮-把货从卸货点运到仓库
byte[] b = new byte[1024];
// 要有接货的车
DatagramPacket dps = new DatagramPacket(b, b.length);
ds.receive(dps);
System.out.println(new String(b));
ds.close();
}
}
public class UDPDemo2 {
public static void main(String args[]) throws Exception {
//new一个仓库-DatagramSocket,端口来自另外仓库
DatagramSocket ds = new DatagramSocket(8988);
//收信息
//要有装货的小三轮-把货从卸货点运到仓库
byte [] b = new byte [1024];
//要有接货的车
DatagramPacket dps = new DatagramPacket(b, b.length);
ds.receive(dps);
System.out.println(new String(b));
//发信息
//要有货
String s = "你好中国2";
//要有车
DatagramPacket dpf = new DatagramPacket(s.getBytes(),s.getBytes().length,InetAddress.getByName("127.0.0.1"),8888);
ds.send(dpf);
ds.close();
}
}
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。