《疯狂Java讲义》(三十五)---- 网络编程

  Java网络通信非常简单,服务器端通过ServerSocket建立监听,客户端通过Socket连接到指定服务器后,通信双方就可以通过IO流进行通信。

  IP地址用于唯一地标识网络中的一个通信实体。端口用于表示数据交给哪个通信程序处理。

  公认端口从0到1023,紧密绑定一些特定的服务。注册端口从1024到49151,应用程序通常应该使用这个范围的端口。动态端口从49152到65535,是应用程序使用的动态端口,应用程序一般不会主动使用这些端口。

package com.ivy.net;

import java.net.InetAddress;

public class InetAddressDemo {

    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub

        InetAddress ip = InetAddress.getByName("www.google.com");
        System.out.println("crazyit isReachable : " + ip.isReachable(2000));
        System.out.println(ip.getHostAddress());
        InetAddress local = InetAddress.getByAddress(new byte[]{127,0,0,1});
        System.out.println("local isReachable : " + local.isReachable(2000));
        System.out.println(local.getHostAddress());
    }

}

当URL地址里包含非西欧字符的字符串时,系统会将这些非西欧字符串转换成application/x-www-form-urlencoded MIME字符串。这就需要URLDecoder和URLEncoder类。只包含西欧字符的普通字符串无须转换。

package com.ivy.net;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

public class URLDecoderDemo {

    public static void main(String[] args) throws UnsupportedEncodingException {
        // TODO Auto-generated method stub

        String keyWord = URLDecoder.decode("%B7%E8%BF%F1Java", "GBK");
        System.out.println(keyWord);
        String urlString = URLEncoder.encode("疯狂Java讲义", "GBK");
        System.out.println(urlString);
    }

}

通常情况下,URL可以由协议名/主机/端口和资源组成,即如下格式

protocol://host:port/resourceName

eg. http://www.crazyit.org/index.php

使用Socket通信

package com.ivy.net;

import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub

        ServerSocket ss = new ServerSocket(30000);
        while(true) {
            Socket s = ss.accept();
            PrintStream ps = new PrintStream(s.getOutputStream());
            ps.println("Hello");
            ps.close();
            s.close();
        }
    }

}
package com.ivy.net;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub

        Socket socket = new Socket("127.0.0.1", 30000);
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line = br.readLine();
        System.out.println("data from server : " + line);
        br.close();
        socket.close();
    }

}
时间: 2024-12-14 20:38:04

《疯狂Java讲义》(三十五)---- 网络编程的相关文章

疯狂JAVA讲义---第十五章:输入输出(上)流的处理和文件

在Java中,把这些不同类型的输入.输出抽象为流(Stream),而其中输入或输出的数据称为数据流(Data Stream),用统一的接口来表示,从而使程序设计简单明了. 首先我要声明下:所谓的输入输出都是相对内存而言的 还要讲几个基本概念:字节流和字符流,字节流8位,主要由InputStream和OutputStream来处理.字符流16位,主要由Reader和Writer来处理. 节点流和处理流,磁盘或网络等读写的数据的流为节点流,对节点流进行封装和处理的流叫处理流. InputStream

疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条

http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程java任务timerstring 2009-01-16 21:12 6722人阅读 评论(0) 收藏 举报  分类: J2SE(63)  版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天讲了Swing基本的控件,今天开始讲特殊控件.一天讲2个吧,首先讲用JProgressBar,Pro

Java进阶(三十五)java int与integer的区别

Java进阶(三十五)java int与integer的区别 前言 int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象. 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是前者而integer 是后者(也就是一个类):因此在类进行初始化时int类的变量初始为0.而Integer的变量则初始化为null. 2.初始化时: int i =1; Integer i= new In

《疯狂Java讲义》(五)---- 数据类型

一 注释 单行注释:// 多行注释:/*   */ 文档注释:/** */ 由于只有public或protected修饰的内容才是希望暴露给别人使用的内容,而API文档主要是向使用者提供信息,因此javadaoc默认只处理public或protected修饰的内容,如果开发者确实希望javadoc工具可以提取private修饰的内容,则可以在使用javadoc工具时增加-private选项. javadoc工具默认不会提取@author和@version两个标记的信息,如果需要,应该在使用jav

疯狂Java讲义(十四)---- 抽象类和接口

抽象类 抽象方法和抽象类必须使用abstract修饰符定义,有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法.抽象类不能被实例化. 接口 接口只是一种规范,定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里的实现细节,它只规定这些类必须提供某些方法.接口体现的是规范和实现分离的设计哲学. 接口语法: 修饰符可以是public或省略,如果省略修饰符,默认采用包权限访问控制符.所以一般都是public.因为接口是多个类共同的公共行为规范,因此接口里的所有成员都

Java进阶(三十四)Integer与int的种种比较你知道多少?

Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值为0,Ingeter的初值为null.但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱.所以我对它们进行了总结,希望对大家有帮助. 首先看代码: package

IT行业:听说编程编到三十五岁就没人要了一定要转行找出路

我听说编程编到三十五岁就没人要了一定要转行找出路是吗? 这个观点虽然很流行,但根本不值一驳.现在三十五岁转行的那些人,都具有前面所说的那些特征,对学习新技术不感兴趣,对探索计算机的本质不感兴趣,得过且过,下了班就是打游戏.看电视,总之就是懒.如果是开出租.摆摊,勤快人懒人都有饭吃,而IT这一行对懒人是非常无情的,懒人就不该入IT这一行,不从自身找原因,却到处散布这种言论,怪社会不好,打击新人的信心,着实可恨. 另外一种情况,编程编到三十五岁,进入公司的管理层,或者自己创业,这都是很勤快的人,如果

疯狂java 讲义第三章练习题---画圆

public class PaintRound{ /** * @author Dream_e. * @version v1.0 */ private int r;//圆的半径 PaintRound(int r){ this.r = r; } public void paint(){ int y = 2*r;//y的最大值为半径的2倍 int x = 0; int c = 0; int z = 2;//坐标轴递减量. for(int j = y; j >= 0; j-=z){ x = getX(r

[原创]ActionScript3游戏中的图像编程(连载三十五)

2.2.8 Photoshop品质初探——杂色 重新回到Photoshop的品质选项,首先,杂色一项似乎更容易理解,我们尝试拖到30%,可以看到投影上多了一些杂点(图 2.29).数值越大,杂色越多,很适合用来模拟锈迹或者羊皮纸等粗糙的表面. 图 2.29 设置30%的杂色 杂色上方的等高线可谓Photoshop图层样式最最精华之处了,下面我们就来探讨一下. 现在先把杂点一项重置为0. [原创]ActionScript3游戏中的图像编程(连载三十五)