-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
网络编程(Socket编程)
通讯要素:1:ip和端口号 2:网络通信协议
Ip定位一台主机,端口号定位主机上的一个应用程序
找到主机,和端口号,如何可靠高效的进行数据传输,依靠的是网络通信协议。
Java中用InetAddress类来代表ip地址,一个InetAddress对象代表一个ip地址。
如何获取InetAddress对象,通过InetAddress的getByName(String host)方法获得,其中host可以是一个域名,也可以是一个ip地址。
例如:InetAddress.getByName(“www.baidu.com”)或者InetAddress.getByName(“127.0.0.1”).
获取对象后,两个常用方法:
getHostName():获取ip地址对应的主机名
getHostAddress():获取ip地址。
获取本机的InetAddress对象
InetAddress.getLocalHost();返回一个本机IP地址对象
网络通信协议
两个重要的协议:
1:传输控制协议Tcp 2:用户数据包协议Udp
两个协议的比较:
Socket(套接字):
通信的两端都要有socket,是两台机器通信的端点。
网络通信其实就是socket通信。
Tcp/Ip协议代码演示:
客户端:
//获取一个socket对象,指定要发送到的ip地址跟端口号
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9090);
//获取一个输出流
OutputStream os = socket.getOutputStream();
os.write("我是客户端".getBytes());
os.close();
socket.close();
服务端:
//定义一个serversocket对象,指明接收的端口号
ServerSocket ss=new ServerSocket(9090);
//通过accep()方法获得一个socket对象
Socket socket=ss.accept();
//获取输入流
InputStream is=socket.getInputStream();
byte[] bytes=new byte[4];
int len;
while((len=is.read(bytes))!=-1){
String str=new String(bytes, 0, len);
System.out.print(str);
}
is.close();
socket.close();
ss.close();
Ucp/Ip协议代码演示:
客户端:
DatagramSocket ds=new DatagramSocket();
byte[] bytes="我是客户端".getBytes();
//创建一个数据报,指明要发送的ip地址,端口号,和数据
DatagramPacket dp=new DatagramPacket(bytes, 0, bytes.length, InetAddress.getLocalHost(),9090);
//发送数据报
ds.send(dp);
ds.close();
服务端:
//创建一个datagramsocket对象并且指明端口
DatagramSocket ds=new DatagramSocket(9090);
byte[] bytes=new byte[1024];
//用来接收数据的数据报
DatagramPacket dp=new DatagramPacket(bytes, 0, bytes.length);
//接收数据到数据报
ds.receive(dp);
//获取结果
String str=new String(dp.getData(), 0, dp.getLength());
System.out.println(str);
Url:统一资源定位符,它表示Internet上某一资源的地址
url的基本结构由五部分组成:
传输协议://主机名:端口号/文件名
如:http://192.168.1.100::8080/helloword/index.html
通过url获取网络中的数据
代码演示:
//获取一个url对象
URL url=new URL("http://127.0.0.1:8080/examples/HelloWorld.txt");
//获取一个输入流
InputStream is=url.openStream();
byte[] bytes=new byte[1024];
int len;
while((len=is.read(bytes))!=-1){
String str=new String(bytes, 0, len);
System.out.print(str);
}
is.close();
Url对象可以通过openConnection();方法返回一个URLConnection对象,然后通过该对象可以获得输入输出流。