1、网络编程概述
把分布在不同地理区域的具有独立功能的计算机,通过通信设备,网线连接起来,实现在不同计算机之间的资源共享、信息互通。 程序员面对的是一个统一的网络编程环境,java是Internet上的语言。我们所编写的程序具备网络间进行信息传递,java是支持网络通信。将底层实现细节封装起来。 网络通信协议 物理层和数据链路层 涉及物理介质访问和二进制数据流传输。 网络层的主要涉及寻址和路由选择。 传输层的基本功能由两台主机间的应用程序提供端到端的通信。从应用层接受数据,必要时会把它分为小单元,传递给网络层,并确保到达对方的各段信息正确无误。 应用层提供应用程序的网络接口。
数据封装与数据拆封 如何实现网络中的主机互相通信: 通信双方地址 一定的规则
2、通讯要素:IP 和端口号
1、如何找到计算机网络中的某台主机ip 在“cmd”中,在输入“ipconfig /all” 2、找到主机后,如何安全高效的进行数据传输(通信协议) IP:计算机地址 分类方式1:IPV4 和IPV6 分类方式2:公网地址(万维网使用)和 私有地址(局域网使用),192.168. 端口号:给计算机上运行的程序分配的编号—端口号(不重复) Tomcat 占用端口8080,MySql占用端口 3306,Oracle 占用端口1521等 端口号与IP地址的组合得出一个网络套接字
3、InetAddress类
Internet上的主机有两种方式表示地址: 域名(hostName):www.baidu.com IP地址(hostAddress):220.181.111.37 inetAddress类主要表示IP地址 ,两个子类:Inet4Address、Inet6Address InetAddress 类对象含有一个 Internet 主机地址的域名和IP地址:www.baidu.com和 220.181.111.37 域名容易记忆,当在连接网络时输入一个主机的域名后,域名服务器(DNS)负责将域名转化为IP地址,这样才能与主机建立连接 ---- 域名解析
4、通讯要素:网络通信协议
在通信过程中双方定义的一系列规则,例如:传输的速率、代码、代码结构、出错控制等制定标准。 传输层协议: 传输控制协议TCP(Transmission Control Protocol) 用户数据报协议UDP(User Datagram Protocol)
TCP: 面向连接,通信之前,要先建立连接。(聊天)三次握手,四次挥手。 UDP:无连接,每个数据报的大小限制在64k内,不可靠,结束不需要释放资源,速度快(发射导弹,具体的位置输入到导弹)
5、Socket
1、通信两端都要有Socket,是两台机器间通信的端点 2、网络通信就是Socket间的通信 3、Socket允许程序把网络连接成一个流,数据在两个Socket间通过IO传输 Socket类 (套接字:包含服务器IP+端口) ServerSocket(提供服务) 基于TCP协议的数据传输
package com.ff.java.day1;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ServerDemo {
public static void main(String[] args) throws IOException {
ServerSocket ss=new ServerSocket(9560);
System.out.println("请求连接");
Socket serversocket=ss.accept();
System.out.println("连接成功");
InputStream ins=serversocket.getInputStream();
byte[] b=new byte[100];
int length=ins.read(b);
String w=new String(b,0,length,"utf-8");
System.out.println(w);
}
}
package com.ff.java.day1;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class ClientDemo {
public static void main(String[] args) throws IOException {
Socket sss=new Socket("127.0.0.1",9560);
OutputStream out =sss.getOutputStream();
out.write("你好".getBytes("utf-8"));
}
}
package com.ff.java.day2;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket(9966);
while (true){
Socket socket=serverSocket.accept();
System.out.println("服务端:");
OutputStream out =socket.getOutputStream();
InputStream in =socket.getInputStream();
DataOutputStream dataOutputStream=new DataOutputStream(out);
DataInputStream dataInputStream =new DataInputStream(in);
Scanner scanner =new Scanner(System.in);
while (true){
String s2= dataInputStream.readUTF();
System.out.println("读取客户端:"+s2);
String s1 =scanner.next();
dataOutputStream.writeUTF(s1);
}
}
}
}
package com.ff.java.day2;
import javax.print.DocFlavor;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket=new Socket("127.0.0.1",9966);
OutputStream out =socket.getOutputStream();
InputStream in =socket.getInputStream();
DataOutputStream dataOutputStream=new DataOutputStream(out);
DataInputStream dataInputStream =new DataInputStream(in);
Scanner ss=new Scanner(System.in);
while (true){
System.out.println("客户端");
String s =ss.next();
dataOutputStream.writeUTF(s);
String q =dataInputStream.readUTF();
System.out.println("读取服务端:"+q);
}
}
}
6、UDP
系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达 发送端与接收端是两个独立的运行程序
package com.ff.java.da;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Server {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket =new DatagramSocket(9966);
byte [] b=new byte[100];
while (true){
DatagramPacket datagramPacket =new DatagramPacket(b,b.length);
datagramSocket.receive(datagramPacket);
String s =new String(b);
System.out.println(s);
}
}
}
package com.ff.java.da;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
datagramSocket =new DatagramSocket();
while (true){
String s="客户端:你好";
byte [] b =s.getBytes("utf-8");
DatagramPacket datagramPacket =new DatagramPacket(b,b.length,InetAddress.getByName("127.0.0.1"),9966);
datagramSocket.send(datagramPacket);
}
}
}
|