A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周发建 中级黑马   /  2016-3-28 09:47  /  534 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、网络编程[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);
}

1 个回复

倒序浏览
42期 java基础班
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马