Java TCP Socket编程模型
程序员文章站
2022-04-04 15:20:46
...
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(); } }
上一篇: 不见你穿裤叉
下一篇: angular中的路由简单使用