一、网络:将不同区域的计算机连接到一起 局域网 城域网 互联网
二、IP地址 确定网络上一个绝对地址|位置 -->房子的地址
三、端口号:区分计算机软件的 -->房子的房门 2个字节 0-65535 共65536 个
1、在同一个协议下 端口号不能重复 不同协议下可以重复
2、1024以下的不要使用 80-->http 21-->ftp
四、资源定位:URL 统一资源定位符(不光有资源还有定位) URI:统一资源(只有资源)
五、数据的传输
1、协议:TCP和UDP协议
1)、TCP(transfer control protocol):电话 类似于三次握手 面向连接 安全可靠 效率低下
2)、UDP(UserDatagramProtocol):短信 非面向连接 效率高
2、传输:
1)、先封装
2)、后拆封
类
1、InetAddress InetSocketAddress
2、URL
3、TCP :ServerSocket Socket
4、UDP:DatagramSocket DatagramPacket
1、InetAddress :封装 IP 及DNS
方法:
-
-
getHostAddress()
返回文本显示中的IP地址字符串。
-
getHostName()
获取此IP地址的主机名。
-
static InetAddress
getLocalHost()
返回本地主机的地址
-
-
-
-
static InetAddress
getByName(String host)
确定主机名称的IP地址。
-
2、InsetSocketAddress:封装端口
1)、创建对象:
-
-
InetSocketAddress(InetAddress addr, int port)
从IP地址和端口号创建套接字地址。
InetSocketAddress(int port)
创建一个套接字地址,其中IP地址为通配符地址,端口号为指定值。
InetSocketAddress(String hostname, int port)
从主机名和端口号创建套接字地址。
-
2)、方法:
-
-
InetAddress
getAddress()
获得
InetAddress
。String
getHostName()
获得
hostname
。String
getHostString()
如果没有主机名(使用文字创建),则返回主机名或地址的String形式。
int
getPort()
获取端口号。
-
UDP:以数据为中心 非面向连接 不安全 数据可能丢失 效率高
一、类 DatagramSocket DatagramPacket
1、客户端:
a、创建DatagramSocket 类+端口
b、准备数据 字节数组
c、打包 DatagramPacket+服务器地址 及端口
d、发送
e、释放资源
2、服务端:
a、创建DatagramSocket类+指定端口
b、准备接受容器 字节数组 Datagrampacket
c、包 接收数据
d、分析
e、释放资源
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Sever {
public static void main(String[] args) throws IOException {
DatagramSocket server=new DatagramSocket(8888);
//准备容器
byte[] con=new byte[1024];
DatagramPacket packet=new DatagramPacket(con,0, con.length);
server.receive(packet);
//分析数据
double data=convert(packet.getData());
System.out.println(data);
}
public static double convert(byte[] b) throws IOException {
DataInputStream dis=new DataInputStream(new BufferedInputStream(new ByteArrayInputStream(b)));
double data=dis.readDouble();
dis.close();
return data;
}
}
import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class Client {
public static void main(String[] args) throws IOException {
//创建客户端
DatagramSocket client=new DatagramSocket(9999);
//准备数据
double d=2.1;
byte[] data=convert(d);
//打包
DatagramPacket packet=new DatagramPacket(data,0,data.length,new InetSocketAddress("127.0.0.1",8888));
//发送
client.send(packet);
client.close();
}
public static byte[] convert(double d) throws IOException {
ByteArrayOutputStream bos=new ByteArrayOutputStream();
DataOutputStream dos=new DataOutputStream(new BufferedOutputStream(bos));
dos.writeDouble(d);
dos.flush();
byte[] data=bos.toByteArray();
dos.close();
return data;
}
}
TCP:面向连接 安全 可靠 效率低 类似于打电话
一、面向连接:请求 相应 Request-Response
二、Socket编程
1、服务器:ServerSocket
2、客户端:Socket
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 1、创建服务器
*/
public class TCPServer {
public static void main(String[] args) throws IOException {
//创建服务器
ServerSocket server=new ServerSocket(8888);
//建立连接
Socket socket=server.accept();
System.out.println("建立一个连接");
String s="欢迎使用";
/* DataOutputStream dos=new DataOutputStream(socket.getOutputStream());
dos.writeUTF(s);
dos.flush();*/
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write(s);
bw.newLine();//下一行
bw.flush();
}
}
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* 创建客户端
*/
public class TCPClient {
public static void main(String[] args) throws IOException {
Socket client=new Socket("localhost",8888);
//接收数据
/* DataInputStream dis=new DataInputStream(client.getInputStream());
System.out.println(dis.readUTF());*/
BufferedReader br=new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println(br.readLine());
}
}