socket
点对点通信
应用:qq,游戏,硬件交互
有两种通信方式:tcp(面向流通信) udp(数据报通信)
端口:出入数据的门
系统向应用层开发:1000-9999
tcp协议下的面向流式通信
服务器思路:
1 建立通道
ServerSocket server = new ServerSocket(端口);
2等待客户端发请求
Socket client=server.accept();
3 收到请求后读取消息
BufferedReader reader=new BufferedReader(new InputStreamReader(client.getInputStream()));
String xx= reader.readLine();
4 向对方发消息
PrintWriter print=new PrintWriter(socket.getOutputStream());
print.println(要发的消息);
print.flush();
5 关闭流和通道
客户端思路:
1 建立和服务器的连接
Socket sock = new Socket(服务器ip地址,端口);
2 向对方发消息
PrintWriter print=new PrintWriter(socket.getOutputStream());
print.println(要发的消息);
print.flush();
3 收对方给的消息
BufferedReader reader=new BufferedReader(new InputStreamReader(client.getInputStream()));
String xx= reader.readLine();
4 关闭流和通道
1网络通信的用途和特点
2socket通信两种形式
1 Tcp/ip --->多线程结合
2 udp
3 URL编程 URI
1网络通信的用途和特点
1点对点通信(地址)
2用途 聊天 四人游戏 二人游戏
硬件交互(智能家电,远程控制电器开启)
端口:1~65535
软件:1000~9999
TCP/IP协议通信过程
一服务器:
1 ServerSocket server =new ServerSocket(5000);
2 等待别人跟我连接 Socket client= server.accept()
3 读消息
InputStream is=client.getInputStream();
BufferedReader reader=new BufferedReader( new InputStreamReader(is));
reader.readLine();
4 发消息
OutputStream os=clinet.getOutputStream();
PrinterWriter ww= new PrinterWriter(os);
ww.println("xxx");
ww.flush();
5:关闭相关资源
流
通道
服务器
二 客户端、
1 Socket cok = new Socket("127.0.0.1",5000);
2 发消息
OutputStream os=cok.getOutputStream();
PrinterWriter ww= new PrinterWriter(os);
ww.println("xxx");
3 读消息
InputStream is=cok.getInputStream();
BufferedReader reader=new BufferedReader( new InputStreamReader(is));
reader.readLine();
5:关闭相关资源
流
通道
通信内容:
读写对象:
序列化:ObjectInputStream /ObjectOutputStream
Userinfo Serializable
ObjectOutputStream xx=new ObjectOutputStream( new FileOutputStream(D:/xxxxs))
xx.writeObject(userinfo)
socket通信
1BufferedReader PrintWriter 发文本消息
2 ObjectInputStream/ObjectOutputStream 对象通信
3 FileInputStream/FileOutputStream 图片
4 多线程
服务器端--》socket --->读 写消息
---》socket-->读 写消息
---》socket-->读 写消息
多线程
UDP特点:不用建立通道,部分客户端和服务器端,效率高,不安全
DatagrameSocket 用来收发数据报的对象
DatagramePacket 数据
Tcp特点:需要建立连接,关闭连接,
安全稳定但效率比较低
收消息过程:
1 DatagrameSocket ds = new DatagrameSocket(5000);
2
byte[] arr = new byte[1024];
DatagramePacket packet = new DatagramePacket(arr,arr.length);
ds.receiver(packet);
3 查看
String str = new String(packet.getDatas(),0,packet.getDatas().length)
发消息:
1 DatagrameSocket ds = new DatagrameSocket();
2 DatagramePacket packet = new DatagramePacket(数据byte[],数据长度,ip地址 InetAddress,端口);
ds.send(packet);
协议:
tcp/ip: 应用层(http ftp) 传输层(tcp udp) 网络层(ip) 数据链路层(link)
tcp: 建立连接 关闭连接 效率低 安全可靠
udp: 不需要建立连接 效率高,不安全
InetAddress对象 网络地址对象 域名/ip地址
InetAddress add = InetAddress.getByName("www.baidu.com");
add.getHostName();
add.getHostAddress();
InetAddress add = InetAddress.getLocalHost();
端口: 1~65532
udp通信:
发消息
DatagrameSocket sock = new DatagrameSocket();
DatagramePacket pack = new DatagramePacket(发消息byte数组,消息长度,InetAddress对象,端口);
sock.send(pack);
收消息
DatagrameSocket sock = new DatagrameSocket(端口);
byte[] arr=new byte[100]
DatagramePacket pack = new DatagramePacket(arr,arr.length);
sock.receiver(pack)
url网络通信
URL 统一资源定位