java网络编程socket的使用
2024-10-18 17:10:52
Socket 客户端实例
如下的 GreetingClient 是一个客户端程序,该程序通过 socket 连接到服务器并发送一个请求,然后等待一个响应。
GreetingClient.java 文件代码:
1 // 文件名 GreetingClient.java
2
3 import java.net.*;
4 import java.io.*;
5
6 public class GreetingClient
7 {
8 public static void main(String [] args)
9 {
10 String serverName = args[0];
11 int port = Integer.parseInt(args[1]);
12 try
13 {
14 System.out.println("连接到主机:" + serverName + " ,端口号:" + port);
15 Socket client = new Socket(serverName, port);
16 System.out.println("远程主机地址:" + client.getRemoteSocketAddress());
17 OutputStream outToServer = client.getOutputStream();
18 DataOutputStream out = new DataOutputStream(outToServer);
19
20 out.writeUTF("Hello from " + client.getLocalSocketAddress());
21 InputStream inFromServer = client.getInputStream();
22 DataInputStream in = new DataInputStream(inFromServer);
23 System.out.println("服务器响应: " + in.readUTF());
24 client.close();
25 }catch(IOException e)
26 {
27 e.printStackTrace();
28 }
29 }
30 }
Socket 服务端实例
如下的GreetingServer 程序是一个服务器端应用程序,使用 Socket 来监听一个指定的端口。
GreetingServer.java 文件代码:
1 // 文件名 GreetingServer.java
2
3 import java.net.*;
4 import java.io.*;
5
6 public class GreetingServer extends Thread
7 {
8 private ServerSocket serverSocket;
9
10 public GreetingServer(int port) throws IOException
11 {
12 serverSocket = new ServerSocket(port);
13 serverSocket.setSoTimeout(10000);
14 }
15
16 public void run()
17 {
18 while(true)
19 {
20 try
21 {
22 System.out.println("等待远程连接,端口号为:" + serverSocket.getLocalPort() + "...");
23 Socket server = serverSocket.accept();
24 System.out.println("远程主机地址:" + server.getRemoteSocketAddress());
25 DataInputStream in = new DataInputStream(server.getInputStream());
26 System.out.println(in.readUTF());
27 DataOutputStream out = new DataOutputStream(server.getOutputStream());
28 out.writeUTF("谢谢连接我:" + server.getLocalSocketAddress() + "\nGoodbye!");
29 server.close();
30 }catch(SocketTimeoutException s)
31 {
32 System.out.println("Socket timed out!");
33 break;
34 }catch(IOException e)
35 {
36 e.printStackTrace();
37 break;
38 }
39 }
40 }
41 public static void main(String [] args)
42 {
43 int port = Integer.parseInt(args[0]);
44 try
45 {
46 Thread t = new GreetingServer(port);
47 t.run();
48 }catch(IOException e)
49 {
50 e.printStackTrace();
51 }
52 }
53 }
编译以上两个 java 文件代码,并执行以下命令来启动服务,使用端口号为 6066:
$ javac GreetingServer.java
$ java GreetingServer 6066
等待远程连接,端口号为:6066...
新开一个命令窗口,执行以上命令来开启客户端:
1 $ javac GreetingClient.java
2 $ java GreetingClient localhost 6066
3 连接到主机:localhost ,端口号:6066
4 远程主机地址:localhost/127.0.0.1:6066
5 服务器响应: 谢谢连接我:/127.0.0.1:6066
6 Goodbye!
最新文章
- BZOJ2763 [JLOI2011]飞行路线(SPFA + DP)
- OpenCV中的矩阵操作
- [Java面试四]Strust2总结及在面试中的一些问题.
- tensorflow 学习(一)
- C++类库介绍
- bzoj1758 [Wc2010]重建计划 &; bzoj2599 [IOI2011]Race
- [vijos P1512] SuperBrother打鼹鼠
- Asynctask的使用及理解
- CSS3秘笈第三版涵盖HTML5学习笔记9~12章
- 【phpMyAdmin】更改配置文件连接到其他server
- maven 第一次运行报错
- 醒醒吧!互联网的真正未来不是AI,更不是VR,AR,而是区块链
- Day2------字符编码
- 读《图解HTTP》有感-(简单的HTTP协议)
- 字符串----hiho字符串(尺取法)
- Eclipse 查看 WebService 服务请求和响应消息
- Vue组件的定义、注册和调用
- linux下ssh远程连接工具SecureCRT和xshell编码设置
- Keras查看model weights .h5 文件的内容
- Ajax中最有名axios插件(只应用于Ajax)(post方法,官网写错了,应是字符串格式)