`
jojo_java
  • 浏览: 93468 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

两个简单的Client实例

    博客分类:
  • JAVA
阅读更多
[code="java"]import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
private static final String ip = "www.google.com";
private static final int port = 80;

public void start() {
try {
Socket socket = new Socket(ip, port);
OutputStream out = socket.getOutputStream();
out.write(getString().getBytes());
socket.shutdownOutput();

InputStream input = socket.getInputStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
byte[] buff = new byte[1024];
int len = -1;
while ((len = input.read(buff)) != -1) {
buffer.write(buff, 0, len);
}
System.out.println(buffer.toString());
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

private String getString() {
StringBuffer buffer = new StringBuffer();
buffer.append("GET / HTTP/1.1\r\n");
buffer.append("Accept: */*\r\n");
buffer.append("Accept-Language: zh-cn\r\n");
buffer.append("Accept-Encoding: gzip, deflate\r\n");
buffer.append("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n");
buffer.append("Host: localhost\r\n");
buffer.append("Connection: Keep-Alive\r\n\r\n");
return buffer.toString();
}

public static void main(String[] args) {
new Client().start();
}
}


[code="java"]/**
* Copyright: Copyright (c) 2007
* <br>
* Company: Digifun
* <br>
* Date: Jan 6, 2010
*/
package navy.net;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Iterator;

/**
* Description:<br>
*
* @author HuangShuzhen
* @version 0.1
*/
public class Client
{
    private ByteBuffer    buffer = ByteBuffer.allocate(1024);

    private SocketChannel channel;

    private Selector      selector;

    SocketAddress         address;
   
    private boolean isRun = true;

    private void start (String host, int port)
    {
        try
        {
            channel = SocketChannel.open();
            channel.configureBlocking(false);
            address = new InetSocketAddress(host, port);
            channel.connect(address);

            selector = Selector.open();
            channel.register(selector, SelectionKey.OP_CONNECT);

            while (isRun)
            {
                if (selector.select() > 0)
                {
                    Iterator<SelectionKey> it = selector.selectedKeys().iterator();
                    while (it.hasNext())
                    {
                        SelectionKey key = it.next();
                        it.remove();
                        if (key.isConnectable())
                        {
                            System.out.println("conn");
                            channel.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE);
                            // 正在建立连接
                            if (channel.isConnectionPending())
                            {
                                // 完成连接
                                channel.finishConnect();
                            }
                        }
                        else if (key.isReadable())
                        {
                            System.out.println("--------------------------read-------------------");
                            read(key);
                        }
                        else if (key.isWritable())
                        {
                            System.out.println("write");
                            write(getHeader());

                        }
                    }
                }
            }
        }
        catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    private byte[] read (SelectionKey key)
    {
        try
        {
            int lenght = channel.read(buffer);
            System.out.println(lenght);
            if (lenght > 0)
            {
                byte[] data = new byte[lenght];
                buffer.flip();
                buffer.get(data);
                System.out.println(new String(data));
                buffer.compact();
                buffer.clear();
            }else if(lenght ==-1){
                isRun = false;
            }

        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return null;
    }

    private byte[] write (String content)
    {
        ByteBuffer src = ByteBuffer.wrap(content.getBytes());
        try
        {
            channel.write(src);
            channel.register(selector, SelectionKey.OP_READ);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return null;
    }

    private String getHeader ()
    {
        StringBuffer buffer = new StringBuffer();
        buffer.append("GET /navy/ HTTP/1.1\r\n");
        buffer.append("Accept: */*\r\n");
        buffer.append("Accept-Language: zh-cn\r\n");
        buffer.append("Accept-Encoding: gzip, deflate\r\n");
        buffer.append("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n");
        buffer.append("Host: \r\n");
        buffer.append("Connection: Keep-Alive\r\n\r\n");
        return buffer.toString();
    }

    public static void main (String[] args)
    {
        Client client = new Client();
        client.start("www.google.com", 80);
//        while(true);
    }

    private static void print (ByteBuffer buffer)
    {
        System.out.println("-----------------------------");
        System.out.println("position:" + buffer.position());
        System.out.println("limit:" + buffer.limit());
        System.out.println("capacity:" + buffer.capacity());
        System.out.println("-----------------------------");
    }
}

分享到:
评论

相关推荐

    Java Socket实例(Server+Client)

    Java Socket实例(Server+Client),分别运行这两个实例,就可以在Client端输入字符,查看在Server端实时接收的字符

    kettle rest 接口 请求实例

    kettle rest 接口 请求实例,rest client 登陆,获取解释token,保存token,批量、单个请求接口,json交互

    JAVA上百实例源码以及开源项目源代码 java开源包2

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    JAVA上百实例源码以及开源项目源代码

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    Oracle客户端:instantclient-basic-nt-19.8.0.0.0dbru.zip

    3、配置window操作系统环境变量(新建以下两个变量) 此电脑(右键)→属性→高级系统设置→环境变量→系统环境变量→新建 变量名:NLS_LANG 变量值: AMERICAN_AMERICA.ZHS16GBK 变量名:TNS_ADMIN 变量值:D:\APP...

    java源码包---java 源码 大量 实例

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    Indy TCP编程实例

    分别在两台网络主机上运行Server和Client,Server部分以 e:\temp\root\为根目录,Client部分以e:\temp\local\为本地目录,可以实现在Server和Client之间上传和下载文件的能够。 本实例还不是很完善,基本功能已经...

    eureka server 与eureka client

    该项目主要包含了一个springcloud框架中的服务注册与服务发现的常用框架的eureka的实例,共包含eureka-client和eureka-server两个模块,打开项目,先启动eureka-server项目,通过localhost:端口便可访问eureka-...

    Java RIM实例

    Java RIM实例,两个工程,一个Server一个Client,直接导入Eclipse可以直接运行

    JAVA端口编程小实例

    本实例共有两个类一个是server类为服务器类 一个是client类为客户端类 先启动server类 然后在启动client类 可以自动向服务器类写入数据

    8个数据库设计实例.pdf

    需求分析主要 解决两个问题: 内容要求。调查应用系统用户所需要操作的数据,决定在数据库中存储什么 数据。 处理要求。调查应用系统用户要求对数据进行什么样的处理,理清数据库中 各种数据之间的关系。 解决这

    C#编写UDP通信实例

    使用时,台式机(通信方1,不一定...两个exe文件需位于同一个局域网(比如校园网)下才能通信,UDPClient_Server.exe(即UDPClient_A)通信端口为6379,UdpClient_B.exe通信端口为6380。具体端口可以在解决方案中更改。

    Windows环境下,面向连接的套接字编程实例(c++实现)

    本资源介绍一个简单的使用winsock套接字进行网络通信的实例。客户机和服务器采用面向连接的传输协议tcp。实例将有助于阐明面向连接的交互中的细节问题,展示套接字调通的次序,以及客户机调用与服务器调用之间的区别...

    Mina长连接短连接实例

    Mina长连接短连接实例包含Minaclient工程和MinaHost工程,另外还有几个文档,相信对理解这两个工程有很大的帮助

    Webservice实例

    Webservice实例,含两种客户端的写法,并且测试测功,对于初学者是个不错的选择。

    8个数据库设计典型实例.pdf

    实例 1 人事管理系统 通过前面管理信息系统基础和 PowerBuilder 基础学习 我们初步掌握了使用 PowerBuilder 进行信息系统开发的基本知识。下面将通过一个个实例来说明如何... 解决这两个问题的时候 程序编制人员需要

    JAVA上百实例源码以及开源项目

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    vc++ 开发实例源码包

    演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology 文档。 P2P视频技术源码(含开发文档) 目前的协议有如下一些特点: 1) 客户向服务器发送请求, 每个请求的长度不定. 请求...

Global site tag (gtag.js) - Google Analytics