动车上的书摘-java网络 连接服务器

一.服务器初试-telnet工具

    当我们编写网络程序时,我们应该认识telnet的小工具(unix 和 win 自带)。Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。win自带的telnet要去开启,开启的步骤如下:
                                 

注意:第一:打开控制面板,打开程序和功能,看到左边有个“打开或关闭Windows功能 ,打开找到telnet客户端,telnet服务器。把这2项都勾选上,然后确定就可以了第二:作为开发人员,最好关闭防火墙。以免被这个自己的防火墙阻止了一些访问权限。

 

二.telnet工具的使用

下面我们就用telnet访问服务器,校对下时间。打开cmd界面,请输入:

telnet time-A.timefreq.bldrdoc.gov 13

应该有些延迟,你会看到黑幕中弹出 来自USA的X原子的计量时间:

56853 14-07-15 07:50:43 50 0 0 645.5 UTC(NIST) *

 

其实,time-A.13timefreq.bldrdoc.gov 是域名,13是端口(port)。返回过来当前日期时间的是端口(13)。远程服务器一直在等待与端口13的网络连接,当其接收到请求,就反馈给客户端。

 

以下,是我提供的telnet的工具常用命令。

           

三.Socket实现访问服务器

import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.util.Scanner;

public class SocketTest
{
    public static void main(String[] args)
    {
        try
        {
            Socket s = new Socket("time-A.timefreq.bldrdoc.gov",13);
            try
            {
                InputStream inStream = s.getInputStream();
                @SuppressWarnings("resource")
                Scanner scanner = new Scanner(inStream);

                while (scanner.hasNextLine())
                {
                    String line = scanner.nextLine();
                    System.out.println(line);
                }
            }
            finally
            {
                s.close();
            }
        } catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

在上面,我们用Socket来访问time-A.timefreq.bldrdoc.gov,获取时间。其中的关键代码:
InputStream inStream = s.getInputStream();

Scanner scanner = new Scanner(inStream);

第一行代码用来打开套接字没用于是该程序和外部间的通信。一旦套接字打
开,Socket类和getInputStream方法返回一个流对象。然后构造个扫描器进行标准输出。不要看Socket
简单易用,java封装了大量的代码,比如网络连接,数据发送直接的复杂过程…

注意:我们这边讨论都都是关于TCP网络协议,大家都知道UDP比TCP开销要少很多。但是UDP适用于音频流和视频流等传输,他无序传递容易在传输中丢失。

 

相关资料:

java.net.Socket

Socket(InetAddress address, int port)

          创建一个流套接字并将其连接到指定 IP 地址的指定端口号。

getInputStream()

          返回此套接字的输入流.

java.util.Scanner

Scanner(InputStream source)

          构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。

四.套接字超时

从套接字读取信息,有可能读操作会被阻塞。良好的处理方式:确定合理的超时值。用setSoTimeout方法设置这个超时(单位:毫秒).

Socket s = new Socket();
s.connect(new InetSocketAddress("time-A.timefreq.bldrdoc.gov", 13), 5000);

java.net.Socket

connect(SocketAddress endpoint, int timeout)
          将此套接字连接到服务器,并指定一个超时值。

五.因特网地址

因特网地址通常是一串数字表示主机地址。由4个字节构成,IPv6规定16个字节,比如:132.163.1.127.如果主机系统支持IPv6格式,则java.net包也支持它。InetAddress对象的静态方法getByName可以返回其对象。

InetAddress address = InetAddress.getByName(www.baidu.com);

下面演示一个demo,用来获取本机 或者 输入的主机名:

package sedion.jeffli.net;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetAddressTest
{
    public static void main(String[] args) throws UnknownHostException
    {
        try
        {
            if (args.length > 0)
            {
                String host = args[0];
                InetAddress[] address = InetAddress.getAllByName(host);
                for (InetAddress inetAddress : address)
                {
                    System.out.println(inetAddress);
                }
            }
            else
            {
                InetAddress localHostAddress = InetAddress.getLocalHost();
                System.out.println(localHostAddress);
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

java.net.InetAddress

static InetAddress getAllByName(String host)
          在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。

static InetAddress getByName(String host)
          在给定主机名的情况下确定主机的 IP 地址。

static InetAddress getLocalHost()
          返回本地主机。

String getHostAddress()
          返回 IP 地址字符串(以文本表现形式)。

String getHostAddress()
          返回 IP 地址字符串(以文本表现形式)。  

时间: 2024-09-10 21:30:58

动车上的书摘-java网络 连接服务器的相关文章

JAVA网络编程服务器多线程接受套接字,如何能使服务器的静态常量,与客户端的数据进行同步?

问题描述 JAVA网络编程服务器多线程接受套接字,如何能使服务器的静态常量,与客户端的数据进行同步? 服务器Server客户端CLientServer静态常量num创建服务器,ServerSocket的端口号为8000,连接套接字.每创建一个客户端,客户端就创建一个Socket,端口号为8000,与服务器进行连接,与此同时,客户端新建ServerSocket,端口号为3000+Server.num,连接套接字.服务器与客户端连接后,服务器新建子线程Handler.子线程Handler,新建Ser

java-初学Java网络编程socket,为何我的服务器打不开?

问题描述 初学Java网络编程socket,为何我的服务器打不开? 初学Java网络编程socket,写了个服务器,但是打不开,求指导.代码如下 import java.io.*; import java.net.*; import java.util.*; import javafx.application.Application; import javafx.application.Platform; import javafx.scene.Scene; import javafx.scen

Java网络服务器编程(NIO版)

编程|服务器|网络 从Java 1.4开始提供的NIO API常用于开发高性能网络服务器,本文演示了如何用这个API开发一个TCP Echo Server.   Java网络服务器编程 一文演示了如何使用Java的Socket API编写一个简单的TCP Echo Server.其阻塞式IO的处理方式虽然简单,但每个客户端都需要一个单独的Thread来处理,当服务器需要同时处理大量客户端时,这种做法不再可行.使用NIO API可以让一个或有限的几个Thread同时处理连接到服务器上的所有客户端.

Java的网络编程:用Java实现Web服务器

web|web服务|web服务器|编程|网络 超文本传输协议(HTTP)是位于TCP/IP 协议的应用层,是最广为人知的协议,也是互连网中最核心的协议之一,同样,HTTP 也是基于 C/S 或 B/S 模型实现的.事实上,我们使用的浏览器如Netscape 或IE 是实现HTTP 协议中的客户端,而一些常用的Web 服务器软件如Apache.IIS 和iPlanet Web Server 等是实现HTTP 协议中的服务器端.Web 页由服务端资源定位,传输到浏览器,经过浏览器的解释后,被客户所看

Java网络编程从入门到精通(14):多种多样的建立网络连接的方式

在上一篇文章中我们讨论了Socket类的基本用法,并给出的例子中使用Socket类连接服务器时使用了一种最简单的连接方式,也就是通过IP和端口号来连接服务器.而为了使连接服务器的方式更灵活,Socket类不仅可以通过自身的构造方法连接服务器,而且也可以通过connect方法来连接数据库. 一.通过构造方法连接服务器 我们可以通过6个重载构造函数以不同的方式来连接服务器.这6个重载的构造函数可以分为两类: 1.自动选择IP 这种方式是最常用的.所谓自动选择IP,是指当本机有多块网卡或者在一个网卡上

服务器-JAVA网络编程问题请大神指导

问题描述 JAVA网络编程问题请大神指导 面试被问到了,请教大神:同一服务器相同Server是否可以共用一个端口?同一服务器不同Server是否可以共用一个端口? 解决方案 一个TOMCAT 可以有多个项目 占一个端口, 多个TOMCAT 需要各自使用不同端口.一个端口只能被一个服务使用. 解决方案二: linux内核中有端口reuse技术,这样可以多个应用绑定到同一个端口,然后内核来调度把连接转发给某个应用.nginx中worker有采用这个

Muduo 网络编程示例(七)“串并转换”连接服务器及其自动化测试

本文介绍如何使用 test harness 来测试一个具有内部逻辑的网络服务程序. 本文的代码见 http://code.google.com/p/muduo/source/browse/trunk/examples/multiplexer 下载地址: http://muduo.googlecode.com/files/muduo-0.2.0-alpha.tar.gz SHA1 checksum: 75a09a82f96b583004876e95105c679e64c95715 云风在他的博客中

大量网络连接时,服务器使用一个端口接收所有连接的数据和使用一个端口对应一个连接有区别吗?

问题描述 大量网络连接时,服务器使用一个端口接收所有连接的数据和使用一个端口对应一个连接有区别吗? 看过一个程序,TCP连接,每个连接都是让客户端用不同的端口,但是想了一下觉得没什么必要,比如HTTP服务器就是一直用80端口处理所有的连接,也都处理得很好.所以就有了题目上的问题,请知道的人指教一下,谢谢! 解决方案 补充一下说明吧,对于IP层来说,只负责把数据送到节点上,而端口就是标识节点上的应用.所以对于不同的应用通讯,肯定不能用一个端口. 但对于一个应用来说,可以用一个端口.根据客户端的端口

android app 在移动网络下无法连接服务器

问题描述 android app 在移动网络下无法连接服务器 我们的服务器在电信托管,现在开发了一款app应用,如果不使用wifi用移动网络不能访问服务器的数据了 但是在联通网络下却可以,在移动网络下面拿手机去访问官网也可以,唯独在app里面不能访问,以前我们的项目部署在阿里云服务器的时候没有任何问题.最近公司自己购买了一台物理服务器就出现这样的问题.就是手机卡是移动的,打开流量能上网,用手机自带的浏览器也能访问我们的网址,即我们的项目,可是app却访问不了.各位程序员兄弟遇到过吗?知道怎么解决