黑马程序员技术交流社区
标题: java基础--网络编程1 [打印本页]
作者: 周发建 时间: 2016-3-28 09:47
标题: java基础--网络编程1
一、网络编程[size=16.0000pt](一)网络要素网络模型:OSI、TCP/IP
网络要素:IP、端口、协议
端口:0~65535、其中0~1024被系统占用
协议:TCP、UDP
IP:InetAddress
将IP地址封装成对象
InetAddress ip = InetAddress.getLocalHost();
getHostAddress(); //主机地址
getHostName(); //主机名
域名解析
先到本地找 %System32%/drivers/etc/hosts文件
再到DNS服务器找
[size=16.0000pt](二)UDP 将数据、源、目的封装到数据包中,不需要建立连接
每个数据包限制在64K
速度快、但不可靠协议
//DatagramSocket 数据套接
DatagramSocket ds = new DatagramSocket(10000, InetAddress.getByName("192.168.1.128"));
//数据报包
DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.128"),10000);
[size=16.0000pt](三)TCP 三次握手建立建立
可以传输大数据
建立连接,可靠但效率稍低
Socket 网络端点
数据在两个Socket间通过IO传输
//客户端
Socket c = new Socket("192.168.1.128",10001);
InputStream in = c.getInputStream();
OutputStream out = c.getOutputStream();
c.shutdownInput(); //流的末尾
c.shutdownInput();
//服务端
ServerSocket ss = new ServerSocket(10001);
Socket sc = ss.accept(); //获取Socket
//练习1,文本转换,小写输入到服务器转换为大写返回给客户端输出
BufferedReader bfr = new BufferedReader(new InputStreamReader(sc.getInputStream()));
String line = bfr.readLine();
line = line.toUpperCase(); //转换为大写
PrintWriter pw = new PrintWriter(sc.getOutputStream(),true);//写入并刷新
pw.println(line);
/* 练习2,上传文件
1. 客户端读取文件到输入流 Socket
2. 服务器端获取Socket-->获取输出流
3. 将输出流写到服务器
*/
/* 练习3,多线程上传图片
* 服务端
* */
ServerSocket iss = new ServerSocket(10002);
while(true){
Socket isc = ss.accept();
//启动线程处理
new Thread(new UploadImage(isc)).start();
}
[size=16.0000pt](四)客户端和服务端 任何进行网络通信的都有C/S,最常用的是B/S
它们之间在Socket之间传输数据
[size=16.0000pt](五)模拟服务/浏览器//模拟服务器端
public static void servicer() throws IOException{
ServerSocket ss = new ServerSocket(9090);
Socket s = ss.accept();
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
String text = new String(buf, 0 ,len);
System.out.println(text);
//给客户端返回信息
PrintWriter out = new PrintWriter(s.getOutputStream(),true); //true刷出
out.println("欢迎来访问");
s.close();
ss.close();
}
//模拟浏览器
public static void browser() throws IOException{
Socket s = new Socket("192.168.1.128",8080);
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
out.println("GET /myweb/1.html HTTP/1.1");
out.println("Accept:*/*");
out.println("Host:192.168.1.100:8080");
out.println("Connection:close");
out.println();
out.println();
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
String str = new String(buf, 0, len);
System.out.println(str);
}
作者: li771735606 时间: 2016-3-28 11:56
42期 java基础班
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |