计算机网络:
局域网 城域网 广域网 互联网
网络分层:
减少复杂性,
OSI :
物理层
表示层
会话层
传输层
网络层
数据链路层
物理层
TCP/IP分层
应用层
传输层
网际层
网络接口
网络编程
套接字,
java.net包里
ip:网协,网络协议 具有唯一性
InetAddress 来表示IP地址
表示本机
方式1:本机ip
方式2:127.0.0.1
方式3:localhost
端口(port)
端口只能是整数 从0到65535
分类:
公认端口:某种协议服务比如80端口表示HTTP
注册端口:松散绑定了一些服务 1024到49151
动态或者私有端口:49152到65535 不应为服务分配这些端口
尽量用10000以后的(端口重复 会出错)
协议:(protocol)网络双方必须遵守的
HTTP 超文本传输协议,
URI:统一资源标识符(一个路径)
URL:统一资源定位符 (打开资源的流)
URLConnection:
编码和解码
URLEncoder编码 一种机制编码 浏览器里收索用的多
//IE的编码解码方式
//编码
String name=”hah 哈哈 12”;
String str=URLEncoder.encode(name,”GBK”);
//解码
String str1=URLDecoder.decode(str,”GBK”);
System.out.println(str);
//获取文件的编码格式
System.out.println(System.getProperty(“file.encoding”));
//非IE编码解码
byte[] data="dajn".getBytes("GBK");
String str3=new String(data,"GBK");
/*******************************************
传输层协议
TCP/UDP
tcp:面向连接 传输可靠,用于传输大量数据,速度慢,建立连接耗费资源多,需要经过3次握手
package cn.bdqn.train605;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class ClientDemo {
/**
* @param args
* @throws IOException
* @throws Exception
*/
public static void main(String[] args) throws Exception, IOException {
// TODO Auto-generated method stub
//创建客户端的连接 并指明服务端的 主机和端口
Socket client=new Socket("localhost",8888);
PrintStream out=new PrintStream(client.getOutputStream());
out.println("hello");
out.close();
Scanner scan=new Scanner(client.getInputStream());
System.out.println(scan.next());
scan.close();
}
}
package cn.bdqn.train605;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class SeverDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//创建服务端 指定端口为8888
ServerSocket server=new ServerSocket(8888);
System.out.println("服务端准备就绪");
while(true){
//接受连接该服务端的客户端对象
Socket client=server.accept();
System.out.println(client.getInputStream());
//获取客户端的输入流
Scanner scan=new Scanner(client.getInputStream());
System.out.println(scan.next());//接受消息
PrintStream out=new PrintStream(client.getOutputStream());
}
}
}
UDP:面向非连接,传输不可靠,用于传输少量数据(数据报包的模式),速度快(有可能丢包的情况)
分为 发送端和接受端
DatagramaSocket 发送和接受数据报包 DatagramaPacket
package cn.bdqn.train605;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
//接受端
public class UDPServerDemo {
public static void main(String[] args) throws Exception {
//创建发送端对象
DatagramSocket send=new DatagramSocket(10010);
DatagramPacket dp=new DatagramPacket(
"hello".getBytes(),//发送的数据
"hello".getBytes().length,//发送数据的长度
InetAddress.getLocalHost(),//发送的IP
10086//端口号
);
send.send(dp);
send.close();
}
}
package cn.bdqn.train605;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
//发送端
public class UDPAcceptDemo {
public static void main(String[] args) throws Exception {
//创建接受端对象
DatagramSocket server=new DatagramSocket(10086);
byte [] buffer=new byte[1024];
DatagramPacket data=new DatagramPacket(buffer,1024);
server.receive(data);
String str=new String(data.getData(),0,data.getLength());
System.out.println("发送的数据"+str);
}
}
3万+

被折叠的 条评论
为什么被折叠?



