黑马程序员 Java基础 网络编程
来源:互联网 发布:深圳燕麦科技知乎 编辑:程序博客网 时间:2024/04/29 06:54
对于网络,java提供了丰富的API,可以很方便的访问互联网上的HTTP服务,可以直接取得网络上的资源,因为java最初就是作为一门网络编程语言出现的。不过要学习java编程,需要先了解一些概念。
一、网络基本概念
1、IP地址
IP地址是用来标识计算机等网络设备的网络地址,由4个8位的二进制组成,中间有小数点分隔。
2、主机名
网络地址的助记名,按域名分级管理。
3、端口号
网络通信时,同一机器上的不同进程标识,其中0-1023是公认端口号。1024-65535是没有公共定义的端口号。
4、服务类型
网络存在各种服务,如HTTP,Telnet、FTP、SMtp。服务类型是应用层上的概念。
5、TCP/IP协议
它实际是一组协议,包括了上百个各种功能的协议,TCP/IP是一个可靠的、需要连接的,但传输效率较慢,TCP里存在一个UDP协议,它不需要连接,但传输效率高。
二、java网路编程API
1、InetAddress类
它是IP地址的封装类,它没有构造方法,但它提供了一些静态方法来返回它的对象。
public class InetTest {public static void main(String[] args) throws Exception{//获取本机IP地址 InetAddress ia = InetAddress.getLocalHost(); System.out.println(ia.toString()); //通过新浪主机名获取其IP地址 InetAddress i = InetAddress.getByName(); System.out.println("name:" + i.getHostName()); System.out.println("address:" + i.getHostAddress());}}2、DatagramSocket和DatagramPacket
它们是利用UDP协议传输数据包的。
public class Udp {public static void main(String[] args) throws Exception{DatagramSocket ds=new DatagramSocket();DatagramSocket dk=new DatagramSocket(10005);new Thread(new TalkSend(ds)).start();new Thread(new TalkRece(dk)).start();}}class TalkSend implements Runnable{private DatagramSocket ds=null;TalkSend(DatagramSocket ds){this.ds=ds;}public void run(){try {BufferedReader bfd = new BufferedReader(new InputStreamReader(System.in));String str;while ((str = bfd.readLine()) != null) {byte[] by=str.getBytes();DatagramPacket dp = new DatagramPacket(by, by.length,InetAddress.getLocalHost(), 10005);ds.send(dp);}} catch (Exception e) {// TODO: handle exception}ds.close();}}class TalkRece implements Runnable{private DatagramSocket ds=null;TalkRece(DatagramSocket ds){this.ds=ds;}public void run(){try {while(true){byte[] bt = new byte[1024];DatagramPacket dp = new DatagramPacket(bt, bt.length);ds.receive(dp);System.out.println(dp.getAddress());System.out.println(new String(dp.getData(), 0, dp.getData().length));}} catch (Exception e) {// TODO: handle exception}}这是Datagram的典型应用,用UDP协议来建立的一个对话小程序,端口的问题需要注意。
3、ServerSocket和Socket
Socket是基于TCP/IP进行通讯的,它是连接的,可靠的,通过Socket,可以很容易实现计算机之间的通讯。
Socket是客户端,它里面封装了输入输出流,可是实现计算机之间的数据交流,而ServerSocket它可以接受Socket,并利用Socket里面的输入输出流来进行计算机之间的通讯。下面就是一个如何构建客户端和服务端的例子。
//客户端 class TransClient { public static void main(String[] args) throws Exception { //创建Socket服务 Socket s = new Socket("192.168.1.103",10009); //定义读取键盘数据的流对象 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); //定义目的,将数据写入到socket输出流,发送服务端 //BufferedWriter bufOut = // new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); PrintWriter out = new PrintWriter(s.getOutputStream(),true); //定义一个socket读取流,读取服务端返回的信息,数据 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); String line = null; while((line=bufr.readLine())!=null) { if("over".equals(line)) break; out.println(line); //bufOut.write(line); //bufOut.newLine(); //bufOut.flush(); String str = bufIn.readLine(); System.out.println("Server:" + str); } bufr.close(); s.close(); } } import java.io.*; import java.net.*; //服务端 class TransSever { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(10009); Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"....connected"); BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); //BufferedWriter bufOut = // new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); PrintWriter out = new PrintWriter(s.getOutputStream(),true); String line = null; while((line=bufIn.readLine())!=null) { System.out.println(line); out.println(line.toUpperCase()); //bufOut.write(line.toUpperCase()); //bufOut.newLine(); //bufOut.flush(); } s.close(); ss.close(); } }
0 0
- 黑马程序员-java基础 网络编程
- 黑马程序员---java基础之网络编程
- 黑马程序员 Java基础 ---> 网络编程
- 黑马程序员:Java基础总结----网络编程
- 黑马程序员 java基础回顾---网络编程
- <<黑马程序员>>java基础之网络编程
- 黑马程序员Java基础__网络编程
- 黑马程序员-Java基础-网络编程
- 黑马程序员--java基础--网络编程
- 黑马程序员--Java基础--11网络编程
- 黑马程序员--Java基础总结---网络编程
- 黑马程序员-java基础-网络编程
- 黑马程序员 Java基础 网络编程
- 黑马程序员---java基础之网络编程
- 黑马程序员--JAVA基础之网络编程
- 黑马程序员--Java基础--GUI、网络编程
- 黑马程序员-----java基础网络编程<一>
- 黑马程序员--Java基础之网络编程
- 1000!末尾 有几个0
- eclipse改变背景颜色,换个心情
- Servlet生命周期和工作原理
- 基于java的全文检索引擎的简介
- leetcode - Maximum Subarray
- 黑马程序员 Java基础 网络编程
- 华摄氏度和摄氏度的转换小数点处理 单片机
- 日期字符串(DateStr)与日期对象(Date)之间的转换
- 51单片机 DS18B20 (测温度 读取序列号 温度警报)
- `menu_proxy_module_load': python: undefined symbol: menu_proxy_module_load
- String和StringBuffer的应用举例
- 你我正青春
- sql之left join、right join、inner join的区别
- Codeforces Round #14 D. Two Paths(求树上两条不相交的路径的乘积最大值)