`
jojo_java
  • 浏览: 96486 次
  • 性别: 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("-----------------------------");
    }
}

分享到:
评论

相关推荐

    Mina server client实例

    在"Mina server client实例"中,我们有两个核心组件:Mina Server和Mina Client。这两个组件通过Java的NIO进行通信,允许客户端与服务器之间高效地交换数据。 **Mina Server** Mina Server是服务端部分,负责监听...

    hbase的java client实例

    在分布式大数据存储领域,HBase是一个非常重要的列式数据库,尤其在处理海量实时数据时表现卓越。本主题将深入探讨如何使用Java客户端API与HBase进行交互,包括集成Spring、MapReduce实例以及协处理器的使用。 首先...

    c# Socket Server Client 实例

    在提供的压缩包中,有两个文件:SocketClient和SocketServer。这些很可能是两个C#项目的源代码文件,一个用于实现服务器端的功能,另一个实现客户端功能。客户端项目通常包含一个连接到服务器的方法,以及发送和接收...

    C# Socket通信两个最简单的实例

    本篇将详细解析"C# Socket通信两个最简单的实例",帮助初学者快速理解Socket通信的基本原理和实现方法。 首先,我们要明确Socket是TCP/IP协议栈中的一个接口,它允许应用程序通过网络发送和接收数据。C#中的System...

    SocketClient通讯实例

    在这个"SocketClient通讯实例"中,我们主要探讨的是如何使用C#语言在Visual Studio 2013环境下,基于.NET Framework 4.0开发一个Socket客户端应用。 首先,让我们了解什么是Socket。Socket在计算机网络中是一种进程...

    smartclient 结合spring 实例

    在本实例中,我们将会看到如何利用这两个组件来创建用户界面。 接下来,我们要讨论Spring框架的角色。Spring框架能够管理应用中的bean,包括SmartClient的客户端组件以及服务器端的服务。通过配置Spring的XML文件,...

    Android编程实现简单的UDP Client实例

    在这个例子中,MainActivity创建了一个UDPClient实例,并在一个新线程中运行。当用户点击“连接”按钮时,调用ConnectServer方法启动UDP客户端。当用户点击“发送”按钮时,调用SendText方法向服务器发送消息。 ...

    ftpserver client 实例

    这两个组件是FTP通信的核心部分。 FTP服务器是接收并处理客户端请求的系统,允许用户上传、下载文件或执行其他文件管理操作。C#中的FTP服务器实现通常涉及使用System.Net.FtpServer库,它提供了丰富的API来创建...

    tcp例子c# server&client

    在IT行业中,TCP(传输控制协议)是一种广泛用于网络通信的协议,因为它提供了一种可靠的、面向...通过实践TcpServerDemo2和ClientDemo2这两个示例,你可以深入理解TCP通信的工作原理,并具备实际编写相关代码的能力。

    C# Client下载和Zip解压文件 实例

    在C#编程环境中,开发客户端应用程序常常涉及到文件的下载与处理。本实例将重点讨论如何使用C#客户端来下载文件并进行...通过结合这两个关键点,开发者可以轻松地实现在C#应用程序中处理网络文件的下载与解压缩需求。

    简单WCF实例WCF初体验

    在你提供的实例中,有"Host"和"Client"两个部分。"Host"是服务端,它负责承载和运行服务,让服务对外可用。"Client"则是客户端,用于调用服务并接收响应。 **四、运行流程** 1. **启动Host**:运行Host程序,它将...

    Java Socket实例(Server+Client)

    在这个实例中,我们有两个关键组件:Server和Client,它们通过Socket进行交互。下面将详细解释Java Socket的工作原理、如何创建Server和Client以及如何在两个端点之间传递数据。 1. **Java Socket基础** Java ...

    C#之TcpClient,UdpClient,Socket入门实例

    TcpClient主要包含两个关键组件:NetworkStream用于数据传输,和TcpClient本身负责建立和管理连接。使用TcpClient时,我们需要先创建一个新的TcpClient实例,然后通过Connect方法连接到远程服务器,最后通过...

    C# SocketServer、Client通信实例源代码

    本篇文章将深入探讨C#中SocketServer和SocketClient通信实例的知识点。 **一、Socket介绍** Socket是网络通信的基本单元,它提供了进程间通信(IPC)和网络间通信的能力。在C#中,Socket类位于System.Net.Sockets...

    Java RMI的Server和Client工程实例

    这个实例包括了RMI的Server和Client工程,让我们来深入探讨一下这两个关键组成部分。 **1. RMI Server** RMI Server是RMI体系结构的核心部分,它负责暴露远程对象。在Java中,我们首先需要创建一个实现了`java.rmi....

    WCF简单实例

    【WCF简单实例】本文将引导读者通过一个简单的WCF(Windows Communication Foundation)应用实例,了解如何构建并运行一个基于WCF的服务。WCF是一种微软提供的面向服务的通信框架,用于构建分布式应用程序,支持跨...

    一个简单的socket程序,包含server和client

    在本项目中,我们有两个主要的文件:`Client`和`Server`。`Client`文件是客户端程序,它的任务是连接到服务器并发送请求;而`Server`文件是服务器程序,它的任务是监听客户端的连接请求,并对请求进行响应。 客户端...

    webservice 实现 两个数相加

    这里的"Web服务实现:两个数相加"是指利用Web服务技术来创建一个简单的功能,即接收两个数字并返回它们的和。这个实例通过Java编程语言实现,并使用Eclipse集成开发环境进行开发。Web服务允许不同平台和语言的应用...

    基于JavaFx的Socket多线程通讯程序实例(含:Server端和Client端)

    Socket是网络通信中的一个端点,它允许两个远程系统通过网络交换数据。在Java中,Socket类代表客户端,ServerSocket类代表服务器端。当Client创建一个Socket实例连接到Server的特定端口时,服务器端会使用...

    webService调用实例 Demo

    【描述】:“内附有两个工程 简单的可运行的Demo 适合初学者 (附:本人也是第一次弄)” 这个描述表明,你将获得两个不同的工程实例,这两个实例都是可以运行的。对于初学者来说,这是非常有价值的,因为你可以...

Global site tag (gtag.js) - Google Analytics