/*
时间:2015年3月14日16:57:14
目的:测试服务器和客户端的tcp编程。
主要介绍类:ServerSocket
ServerSocket类该类最主要的是实现服务器套接字。服务器套接字等待请求通过网络传入
基于该请求执行某些操作,然后可能向该请求返回某些操作。
构造方法有四个:
ServerSocket();//创建非绑定服务器套接字。
public ServerSocket(int port) throws IOException;//创建绑定到特定端口的服务器套接字。
方法:
accept声明如下:
public Socket accept() throws IOException;//返回侦听并接受到此套接字的连接。此方法在连接传入前一直阻塞。
注意:编写网络程序的时候,应该同时编写服务器端和客户端程序。本次程序一共有两个文件第一个源文件是
时间: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.*;
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();
}
}
}
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
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>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
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>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
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();
}
}
}
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
Server says: Hello, client
D:\java\socket>javac TestClient.java
D:\java\socket>java TestClient
Server says: Hello, client
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)
----------------------------------------
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
Server says: Hello, client/127.0.0.1
D:\java\socket>
========================
*/
*/