用TELNET连接Socket服务器程序



在说这个小程序实现之前,我们先仔细分析下ServerSocket和Socket的众多构造方法,了解各个构造方法的细节差异,有助于我们正确的构建一个准确连接的网络应用程序,先说ServerSocket的构造方法:
1)ServerSocket()
          创建非绑定服务器套接字。 必须用bind方法将 ServerSocket 绑定到特定地址(IP 地址和端口号)。

2)ServerSocket(int port)
          创建绑定到特定端口的服务器套接字。 如果为0,那系统自动分配一个没有给程序使用的端口号。

3)ServerSocket(int port, int backlog)
          利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。 backlog用于指定在服务器很忙的时候,可以保持连接的请求数量。第二个默认是50个。

4)ServerSocket(int port, int backlog, InetAddress bindAddr)
          使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。 还可以指定Sersokect所绑了定的地址。在有多块网卡,或者多个IP地址的情况下使用这种构造方法。

       accpet方法接收了客户端的连接请求,返回一个与客户端连接的服务器端socket对象。不能使用下列Socket的任何构造方法去创建服务器端的Socket对象。

Socket的构造方法:
1)Socket()
          通过系统默认类型的 SocketImpl 创建未连接套接字。在客户端尝试去连接多个服务器时,可以不断调用connect 方法来连接服务器。

2)Socket(InetAddress address, int port)
          创建一个流套接字并将其连接到指定 IP 地址的指定端口号。

3)Socket(InetAddress host, int port, boolean stream)
          已过时。 创建一个套接字并将其连接到指定远程地址上的指定远程端口。

4)Socket(Proxy proxy)
          创建一个未连接的套接字并指定代理类型(如果有),该代理不管其他设置如何都应被使用。

5)potected Socket(SocketImpl impl)
         使用用户指定的 SocketImpl 创建一个未连接 Socket。

6)Socket(String host, int port)
       这个构造方法简单方法。创建一个流套接字并将其连接到指定主机上的指定端口号。 接收字符串形式的IPod地址。事实上客户端的端口号一般不需要指定。

7)Socket(String host, int port, boolean stream)
         已过时。使用 DatagramSocket 取代 UDP传输。

8)Socket(String host, int port, InetAddress localAddr, int localPort)
         创建一个套接字并将其连接到指定远程主机上的指定远程端口。

        TELNET是最简单的客户端程序。程序代码编译之后,运行状态下,打开cmd > telnet 127.0.0.1 8001 就可以与这个简单的服务器程序建立连接,默认TELNET对你输入的字符不回显,可以这样打开:TELNET回车 > 进入命令状态 > help >set LOCALECHO 再quit 命令退出。即使telnet不输入回车键,每个字符也会被立即发送出去。服务器端关闭socket对象时。TELNET会反馈信息:遗失对主机的连接。这里我们使用BufferedReader 这个类,来包装我们的网络字节输入流InputStream。new BufferedReader(new InputStreamReader(serverIn));



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
   public static void main(String[] args) throws IOException {
         //建立一个端口号为8001的服务器端ServerSocket对象
      ServerSocket server = new ServerSocket(8001);
          //监听客户端的连接请求
      Socket acceptSocket = server.accept();
          //提取socket对象的输入流
      InputStream serverIn = acceptSocket.getInputStream();
          //提取socket对象的输出流
      OutputStream serverOut = acceptSocket.getOutputStream();
         //在输出流上发送文字,客户端连接上后马上能接收到
      serverOut.write("welcom to visit server.".getBytes());
        //建立缓冲流来显示客户端的输入    
      BufferedReader buf = new BufferedReader(new InputStreamReader(serverIn));     
      String temp = buf.readLine();     
      System.out.println(temp);
     
        //注意关闭顺序
      buf.close();     //会自动关闭低层输入的字节流
      serverOut.close();
      acceptSocket.close();
      server.close();
   }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值