网络编程之初步理解1

/*
 时间:2015年3月14日16:57:14
 目的:测试服务器和客户端的tcp编程。
 主要介绍类:ServerSocket
 ServerSocket类该类最主要的是实现服务器套接字。服务器套接字等待请求通过网络传入
 基于该请求执行某些操作,然后可能向该请求返回某些操作。
 构造方法有四个:
 ServerSocket();//创建非绑定服务器套接字。
 public ServerSocket(int port) throws IOException;//创建绑定到特定端口的服务器套接字。
 方法:
  accept声明如下:
   public Socket accept() throws IOException;//返回侦听并接受到此套接字的连接。此方法在连接传入前一直阻塞。
   注意:编写网络程序的时候,应该同时编写服务器端和客户端程序。本次程序一共有两个文件第一个源文件是
   TestServer.java。第二个是TestClient.java。这个我们可以通过主类名判断出来,下面把这两个程序的源文件都写出来,以供参考和理解。
  
*/

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

public class TestServer {
 public static void main(String[] args) {
 try {
  ServerSocket server = new ServerSocket(8888);
  OutputStream os = null;
  DataOutputStream dos = null;
  while (true) {
   Socket s = server.accept();
   os = s.getOutputStream();
   dos = new DataOutputStream(os);
   String str = "Hello, client";
   dos.writeUTF(str);
   System.out.println(server.toString());
   System.out.println(str + " to " +"此套接字绑定的端口号: " + s.getLocalPort() +  s.getInetAddress() + " #port:" + s.getPort());
   dos.close();
   os.close();
   s.close();
  }
 } catch (IOException e) {
  e.printStackTrace();
 }
 
 }
}


/*
========================


D:\java\socket>javac TestServer.java

D:\java\socket>java TestServer
Hello, client to /127.0.0.1 #port:28025
Hello, client to /127.0.0.1 #port:28031
Hello, client to /127.0.0.1 #port:28033

------------------------------------
D:\java\socket>javac TestServer.java

D:\java\socket>java TestServer
ServerSocket[addr=0.0.0.0/0.0.0.0,localport=8888]
Hello, client to 此套接字绑定的端口号: 8888/127.0.0.1 #port:31310

------------------------------
D:\java\socket>javac TestServer.java

D:\java\socket>java TestServer
ServerSocket[addr=0.0.0.0/0.0.0.0,localport=8888]
Hello, client to 此套接字绑定的端口号: 8888/127.0.0.1 #port:31834

========================
*/

/*

这是客户端程序

 时间:2015年3月14日16:58:17
 目的:测试服务器和客户端的tcp编程。
 主要介绍Socket类:此类是实现客户端套接字,套接字是两台机器间通信的端点。
  Socket类的构造方法为:
   Socket(String host, int port) throws UnknownHostException, IOException。
   public Socket(InetAddress address, int port)throws IOException
    创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
   
   public InetAddress getInetAddress();返回此套接字连接的地址
    此套接字连接到的远程 IP 地址
   public int getPort();//返回此套接字连接的远程端口
   public InputStream getInputStream() throws IOException;
   返回此套接字的输入流,
   如果此套接字具有关联的通道,则所得的输入流会将其所有操作委托给通道。
   如果通道为非阻塞模式,
   则输入流的 read 操作将抛出 IllegalBlockingModeException。
   相应的也能获取该套接字的输出流,getOutputStream()
   
   注意:应该首先启动服务器端程序,
   再启动客户端程序,否则会报下面运行结果中出现的异常
   
   
 
 
*/
import java.net.*;
import java.io.*;

public class TestClient {
 public static void main(String[] args) {
 try {
  Socket client = new Socket("127.0.0.1", 8888);
  InputStream is = client.getInputStream();
  DataInputStream dis = new DataInputStream(is);
  
  String str = dis.readUTF();
  System.out.println("Server says: " + str + client.getInetAddress());
  
  dis.close();
  is.close();
 } catch (UnknownHostException e) {
  e.printStackTrace();
 } catch (IOException e) {
  e.printStackTrace();
 }
  
 }
}

/*
========================

D:\java\socket>javac TestClient.java

D:\java\socket>java TestClient
Server says: Hello, client

D:\java\socket>javac TestClient.java

D:\java\socket>java TestClient
Server says: Hello, client

D:\java\socket>javac TestClient.java

D:\java\socket>java TestClient
Server says: Hello, client
-------------------------------------------
java.net.ConnectException: Connection refused: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at java.net.Socket.connect(Socket.java:538)
        at java.net.Socket.<init>(Socket.java:434)
        at java.net.Socket.<init>(Socket.java:211)
        at TestClient.main(TestClient.java:7)
----------------------------------------

D:\java\socket>javac TestClient.java

D:\java\socket>java TestClient
Server says: Hello, client/127.0.0.1

D:\java\socket>

========================
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值