Java 网络编程案例一:一台客户端与服务器单次通信
需求:客户端连接服务器,连接成功后给服务发送“Hello,服务器!”,服务器收到消息后,给客户端返回“欢迎登录”。
服务器端程序示例代码:
import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args)throws Exception { //1、准备一个ServerSocket对象,并绑定8888端口 ServerSocket server = new ServerSocket(8888); System.out.println("等待连接...."); //2、在8888端口监听客户端的连接,该方法是个阻塞的方法,如果没有客户端连接,将一直等待 Socket socket = server.accept(); System.out.println("一个客户端连接成功!!"); //3、获取输入流,用来接收该客户端发送给服务器的数据 InputStream input = socket.getInputStream(); //接收数据 byte[] data = new byte[1024]; StringBuilder s = new StringBuilder(); int len; while ((len = input.read(data)) != -1) { s.append(new String(data, 0, len)); } System.out.println("客户端发送的消息是:" + s); //4、获取输出流,用来发送数据给该客户端 OutputStream out = socket.getOutputStream(); //发送数据 out.write("欢迎登录".getBytes()); out.flush(); //5、关闭socket,不再与该客户端通信 //socket关闭,意味着InputStream和OutputStream也关闭了 socket.close(); //6、如果不再接收任何客户端通信,可以关闭ServerSocket server.close(); } }
客户端程序示例代码:
import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class Client { public static void main(String[] args) throws Exception { // 1、准备Socket,连接服务器,需要指定服务器的IP地址和端口号 Socket socket = new Socket("127.0.0.1", 8888); // 2、获取输出流,用来发送数据给服务器 OutputStream out = socket.getOutputStream(); // 发送数据 out.write("Hello,服务器!".getBytes()); //会在流末尾写入一个“流的末尾”标记,对方才能读到-1,否则对方的读取方法会一致阻塞 socket.shutdownOutput(); //3、获取输入流,用来接收服务器发送给该客户端的数据 InputStream input = socket.getInputStream(); // 接收数据 byte[] data = new byte[1024]; StringBuilder s = new StringBuilder(); int len; while ((len = input.read(data)) != -1) { s.append(new String(data, 0, len)); } System.out.println("服务器返回的消息是:" + s); //4、关闭socket,不再与服务器通信,即断开与服务器的连接 //socket关闭,意味着InputStream和OutputStream也关闭了 socket.close(); } }
注意:运行程序时,必须先启动服务器程序,主动接受客户端程序的连接请求。
相关推荐
vanturman 2020-02-10
Westdoor 2019-08-25
doyouhaveIET 2011-09-23
zhangwentaohh 2020-09-16
leodengzx 2020-06-28
服务器端攻城师 2020-06-26
xcznb 2020-06-26
sapliang 2020-06-12
xasdfg 2020-06-01
bruce 2020-05-17
cuiweisaidelike 2020-05-11
songjie 2020-02-14
仁鱼 2020-02-12
furongwei 2020-05-10
丁丁爸爸的技术 2020-04-26
xcznb 2020-04-16
服务器端攻城师 2020-02-17