java网络编程(2)

Socket 客户端实例

如下的GreetingClient 是一个客户端程序,该程序通过socket连接到服务器并发送一个请求,然后等待一个响应。

// 文件名 GreetingClient.java

import java.net.*;import java.io.*;

public class GreetingClient{

   public static void main(String [] args)

   {

      String serverName = args[0];

      int port = Integer.parseInt(args[1]);

      try

      {

         System.out.println("Connecting to " + serverName

                             + " on port " + port);

         Socket client = new Socket(serverName, port);

         System.out.println("Just connected to "

                      + client.getRemoteSocketAddress());

         OutputStream outToServer = client.getOutputStream();

         DataOutputStream out =

                       new DataOutputStream(outToServer);



         out.writeUTF("Hello from "

                      + client.getLocalSocketAddress());

         InputStream inFromServer = client.getInputStream();

         DataInputStream in =

                        new DataInputStream(inFromServer);

         System.out.println("Server says " + in.readUTF());

         client.close();

      }catch(IOException e)

      {

         e.printStackTrace();

      }

   }}

Socket 服务端实例

如下的GreetingServer 程序是一个服务器端应用程序,使用Socket来监听一个指定的端口。

// 文件名 GreetingServer.java

import java.net.*;import java.io.*;

public class GreetingServer extends Thread{

   private ServerSocket serverSocket;



   public GreetingServer(int port) throws IOException

   {

      serverSocket = new ServerSocket(port);

      serverSocket.setSoTimeout(10000);

   }



   public void run()

   {

      while(true)

      {

         try

         {

            System.out.println("Waiting for client on port " +

            serverSocket.getLocalPort() + "...");

            Socket server = serverSocket.accept();

            System.out.println("Just connected to "

                  + server.getRemoteSocketAddress());

            DataInputStream in =

                  new DataInputStream(server.getInputStream());

            System.out.println(in.readUTF());

            DataOutputStream out =

                 new DataOutputStream(server.getOutputStream());

            out.writeUTF("Thank you for connecting to "

              + server.getLocalSocketAddress() + "\nGoodbye!");

            server.close();

         }catch(SocketTimeoutException s)

         {

            System.out.println("Socket timed out!");

            break;

         }catch(IOException e)

         {

            e.printStackTrace();

            break;

         }

      }

   }

   public static void main(String [] args)

   {

      int port = Integer.parseInt(args[0]);

      try

      {

         Thread t = new GreetingServer(port);

         t.start();

      }catch(IOException e)

      {

         e.printStackTrace();

      }

   }}

编译以上 java 代码,并执行以下命令来启动服务,使用端口号为 6066:

$ java GreetingServer 6066Waiting for client on port 6066...

像下面一样开启客户端:

$ java GreetingClient localhost 6066

Connecting to localhost on port 6066

Just connected to localhost/127.0.0.1:6066

Server says Thank you for connecting to /127.0.0.1:6066

Goodbye!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值