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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© j420984 中级黑马   /  2015-6-23 20:31  /  607 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一.        网络编程概述
a)        找到对方IP:网络中设备的标识,不易记忆,可用主机名,本机回环地址127.0.0.1
b)        数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识,为了方便称呼这个数字,叫做端口.逻辑端口.
i.        用于标识进程的逻辑地址,不同进程的标识
ii.        有效端口:0~65535其中0~1024系统使用或保留端口
c)        定义通信规则,这个通信规则称为协议,国际组织定义了通用协议,TCP/IP协议
i.        UDP
1.        将数据及源和目的封装成数据包中,不需要建立连接
2.        每个数据包的大小限制在64K内
3.        因无连接,是不可靠协议
4.        不用建立连接,速度快.
ii.        TCP
1.        建立连接,形成传输数据的通道
2.        在连接中进行大数据量传输
3.        通过三次握手完成连接,是可靠协议
4.        必须建立连接,效率会稍低.
二.        Socket
a)        Socket就是为网络服务提供的一种机制
b)        通信的两端都有Socket
c)        网络通信其实就是Socket间的通信
d)        数据在两个Socket间通过IO传输
e)        通过UDP传输方式,将一段文字数据发送出去
i.        建立udpsocket服务DatagramSocket ds = new DatagramSocket();
ii.        提供数据,并将数据封装到数据包中byte[] buf = “udp ge”.getBytes();DatagramPacket dp= new DatagramPacket(buf,buf.length,InetAddress.getByName(“192.168.1.254”),10000);
iii.        通过socket服务的发送功能,将数据包发出去ds.send(dp);
iv.        关闭资源ds.close();
f)        接收端
i.        定义udpsocket服务,通常都会监听一个端口,其实就是给这个接收网络应用程序定义数字标识.方便于明确哪些数据过来该应用程序可以处理.
ii.        定义一个数据包,因为要存储接收到的字节数据,因为数据包对象中有更多功能可以提取字节数据中的不同数据信息.
iii.        通过socket服务的receive方法将收到的数据存入已定义好的数据包中
iv.        通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上
v.        关闭资源
三.        TCP传输
a)        Socket和ServerSocket
b)        建立客户端Socket和服务器端ServerSocket
c)        建立连接后,通过Socket中的IO流进行数据传输
d)        关闭SOCKET
e)        同样,客户端与服务器端是两个独立的应用程序.
四.        UDP聊天示例:

package com.jwd.black.chat;

import java.net.*;
import java.io.*;

public class Rece implements Runnable {
        private DatagramSocket ds;

        public Rece(DatagramSocket ds) {
                this.ds = ds;
        }

        @Override
        public void run() {
                // TODO Auto-generated method stub
                try {
                        while (true) {
                                byte[] buf = new byte[1024];
                                DatagramPacket dp = new DatagramPacket(buf, buf.length);
                                ds.receive(dp);
                                String ip = dp.getAddress().getHostAddress();
                                String data = new String(dp.getData(), 0, dp.getLength());
                                System.out.println(ip + ":" + data);
                        }
                } catch (Exception e) {
                        throw new RuntimeException("接收流失败");
                }
        }

}

package com.jwd.black.chat;

import java.net.*;

public class ChatDemo {

        public static void main(String[] args) throws Exception {
                // TODO Auto-generated method stub
                DatagramSocket s = new DatagramSocket();
                DatagramSocket r = new DatagramSocket(10002);
                new Thread(new Send(s)).start();
                new Thread(new Rece(r)).start();
        }

}
package com.jwd.black.chat;

import java.io.*;
import java.net.DatagramPacket;
import java.net.*;

public class Send implements Runnable {
        private DatagramSocket ds;

        public Send(DatagramSocket ds) {
                this.ds = ds;
        }

        @Override
        public void run() {
                // TODO Auto-generated method stub
                try{
                        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
                        String line = null;
                        while((line = bufr.readLine())!=null){
                                if("886".equals(line))
                                        break;
                                byte[] buf = line.getBytes();
                                DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.128"),10002);
                        ds.send(dp);
                        }
                }catch(Exception e){
                        throw new RuntimeException("发送端失败");
                }
        }
}

11 个回复

倒序浏览
顶一个     
回复 使用道具 举报
顶一个,无私奉献啊
回复 使用道具 举报
不错不错。说说学习的感受呗
回复 使用道具 举报
很棒的!
回复 使用道具 举报
马也keyboard 来自手机 中级黑马 2015-6-24 00:16:15
地板
就喜欢比较一下   学习互补
回复 使用道具 举报
Chasel 中级黑马 2015-6-24 07:18:23
7#
come on !!!
回复 使用道具 举报
顶一个!!!
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
分享是美德
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
尘封印际 发表于 2015-6-23 21:46
不错不错。说说学习的感受呗

最大的感受就是,看一遍,记忆不深刻.平时有时间多看几遍要.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马