1、socket是网络编程的说法,既然是网络编程那么就有服务器端和客户端,首先创建两个类,TCPSocket.java用于当做服务器端,TCPClient.java用于当做客户端,
2、首先编写服务器端,在Java中提供java.net.ServerSocket类来当做网络服务器,构造函数需要一个网络接 口,以6666为例,代码如下:
ServerSocket ss = new ServerSocket(6666);
此时,服务器端已经能够监听客户端请求。
3、编写客户端,在Java中提供java.net.Socket类来当做网络客户端,构造函数需要IP地址和网络接口,这里 的 接口应指明是哪个服务器的接口,在本例中,应该是上面服务器中指定的6666,代码如下:
Socket s = new Socket("127.0.0.1", 6666);
此时,客户端已经向服务器端发出连接请求。
4、客户端发出请求后,服务器端能够监听到,而要接受这个连接请求还要有如下代码:
Socket s = ss.accept();
此时,服务器端和客户端已经能够连接上了。
服务器端完整代码:
import java.net.*;
public class TCPServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(6666);
Socket s = ss.accept();
System.out.println("a client connect!");
}
}
客户端完整代码:
import java.net.*;
public class TCPClient {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1", 6666);
}
}
在运行本例时,应先运行服务器端,然后运行客户端。
当客户端发送一次连接请求后,服务器端接受到后,服务器就停止了,这不符合服务器接受多个用户的要求,所以更改服务器端代码:
import java.net.*;
public class TCPServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(6666);
while(true) {
Socket s = ss.accept();
System.out.println("a client connect!");
}
}
}
accept()方法是阻塞式的方法,只要没有连接请求就会一直等下去,直到有客户端的连接请求发过来,接受之后经过while循环在等下一个请求,经过这个死循环就能实现接受多个用户的连接请求。
以下是用Java数据流由客户端向服务器端发送消息的超小型demo:
服务器端:
import java.net.*;
import java.io.*;
public class TCPServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(6666);
while(true) {
Socket s = ss.accept();
System.out.println("a client connect!");
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println(dis.readUTF());
dis.close();
s.close();
}
}
}
客户端:
import java.net.*;
import java.io.*;
public class TCPClient {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1", 6666);
OutputStream os = s.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
Thread.sleep(30000);
dos.writeUTF("hello server!");
dos.flush();
dos.close();
s.close();
}
}