java网络编程socket的使用
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!
java网络编程socket的使用的更多相关文章
- java网络编程socket\server\TCP笔记(转)
java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04| 分类: Socket | 标签:java |举报|字号 订阅 1 TCP的开销 a ...
- java网络编程socket解析
转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在 ...
- Java网络编程——Socket
网络是连接不同计算机的媒介,不同的计算机依靠网络来互相通信,即传递数据. Java中与网络编程相关的部分主要是Socket(套接字),它作为一种抽象的结构,实现了与通信相关的各类方法,构成一套完整的通 ...
- day05 Java网络编程socket 与多线程
java网络编程 java.net.Socket Socket(套接字)封装了TCP协议的通讯细节,是的我们使用它可以与服务端建立网络链接,并通过 它获取两个流(一个输入一个输出),然后使用这两个流的 ...
- java网络编程Socket通信详解
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
- java网络编程——socket实现简单的CS会话
还记得当年学计网课时用python实现一个简单的CS会话功能,这也是学习socket网络编程的第一步,现改用java重新实现,以此记录. 客户端 import java.io.*; import ja ...
- JAVA网络编程Socket常见问题 【长连接专题】
一. 网络程序运行过程中的常见异常及处理 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行new ...
- java 网络编程Socket
TCP: 通过TCP协议传输,得到的是一个顺序的无差错的数据流. 发送方和接收方的成对的两个socket之间必须建立连接, 以便在TCP协议的基础上进行通信,当一个socket(通常都是server ...
- java 网络编程Socket编程
Server.java import java.io.*; import java.net.*; public class Server { public static void main(Strin ...
- Java网络编程Socket通信
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议 UDP (User Datagram Proto ...
随机推荐
- MeteoInfoLab脚本示例:多Y轴图
数据范围相差比较大的数据序列进行对比的时候多Y轴图就很重要了.MeteoInfoLab中提供了一个twinx函数来根据已有的坐标系(Axes)生成一个新的Axes,这个命令会使得已有的Axes不绘制右 ...
- js产生任意2个区间内的随机整数
var code = myRound(30,100); function myRound(begin,end){ var num = Math.round(Math.random()*(end-beg ...
- 带权二分图最大匹配KM算法
二分图的判定 如果一个图是连通的,可以用如下的染色法判定是否二分图: 我们把X部的结点颜色设为0,Y部的颜色设为1. 从某个未染色的结点u开始,做BFS或者DFS .把u染为0,枚举u的儿子v.如果v ...
- centos平台scp通过密钥远程复制文件(免密登录)
一,说明:两台机器的平台和ip 1,a服务器: centos8:ip:121.122.123.47 版本 [root@yjweb ~]# cat /etc/redhat-release CentOS ...
- switch host 切换本地host
百度网盘提取地址 提取码: 753r 下载后放到软件目录即可使用
- 1.1 Python 概述
1.1 Python 概述 1.1.1 了解Python Python 是由荷兰人 Guido Van Rossum 发明的一种面向对象的解释型高级编程语言.Python的设计哲学为 优雅.明确和简单 ...
- influxdb集群部署
环境准备 influxdb enterprise运行条件最低需要三个meta nodes节点以及两个data nodes Meta nodes之间使用TCP和Raft一致性协议通信,默认端口为8089 ...
- 使用浏览器抓取QQ音乐接口(歌曲篇)
前言 前面我们获取了歌曲的排行榜的数据,我们现在需要实现歌曲播放 前面我们写了一段函数来得到了回调的数据,现在我们需要使用这一段数据,来实现播放歌曲 完整代码 <!DOCTYPE html> ...
- Luogu P6830 [IOI2020]Connecting Supertrees
题意 好复杂,我就不写了. 题解 口胡了一下,发现我居然会 IOI 的题? 首先发现有 \(3\) 一定不合法,因为连通块里面有一个环的话 \(p_{i,j}\) 最多为 \(2\),有两个环的话就存 ...
- linux修改进程名
一.linux中的进程名 linux中有很多查看/操作进程的命令. 这些命令的参数或显示的结果,有的是真实的进程名(top/pstree/pgrep/kill/killall),有的是进程 ...