Java网络编程笔记(三):点对点通信(Socket基于TCP协议)
package core;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;class SocketServer {// Socket服务器端private int port; // 端口号public SocketServer(int port) {this.port = port;start();}private void start() {// 启动服务器端的方法try {ServerSocket serverSocket = new ServerSocket(port);// 根据端口创建服务器System.out.println("服务器已启动,监听端口号为:" + port);System.out.println("正在等待客户端连接。。。。。");Socket socketAccept = serverSocket.accept();// 挂起等待客户的请求BufferedReader in = new BufferedReader(new InputStreamReader(socketAccept.getInputStream()));// 获得(读取客户端的数据流)PrintWriter out = new PrintWriter(socketAccept.getOutputStream(), true); // 获得写往客户端的(数据输出流),true表示自动刷新out.println("服务器端连接成功。。。。");out.println("输入exit断开与服务器的连接");boolean done = false;while (!done) {String line = in.readLine();// 读取客户端每行的内容//System.out.println("line : "+line);if (line == null)done = true;else {System.out.println("客户端传来的内容: " + line);String message = infoUpperCase(line);// 变成大写再传回客户端去out.println("从服务器端口发送的内容 "+message); //--该处的print要加ln,否则就会无法往客户端传递消息if (line.trim().equals("exit")) // 退出判断done = true;}}socketAccept.close(); //关闭通信资源} catch (IOException e) {System.out.println("启动服务器端出现错误:"+e.getMessage());}}public String infoUpperCase(String line) {return line.toUpperCase(); // 将字符串大写}
}public class TextSocketServer {public static void main(String[] args) {try {SocketServer server=new SocketServer(8080);} catch (Exception e) {System.out.println("测试服务器端监听出错: "+e.getMessage());}}
}
客户端程序
package core;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;class Client { // Socket客户端private String host; // IP地址private int port; // 端口号public Client(String host, int port) {this.host = host;this.port = port;connectSocket();// 调用连接方法}public void connectSocket() {Socket socketConn; // 声明客户端的Socket连接try {if (host.equals("localhost") || host.equals("127.0.0.1")) {// 判断IP地址(域名)如果是本机localhostsocketConn = new Socket(InetAddress.getLocalHost(), port);// 创建本地Socket连接//如果该方法InetAddress.getLocalHost()报错,则要在sudo vi /private/etc/hosts 中添加本机地址与你主机名的映射,类似 127.0.0.1 主机名//然后终端执行命令 dscacheutil -flushcache,之后主机地址便可正常解析} else {socketConn = new Socket(InetAddress.getByName(host), port);// 创建远程socket连接}BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));// 获得从键盘输入的流PrintWriter out = new PrintWriter(socketConn.getOutputStream(), true);// 往服务器写内容的数据流// 从服务器获得信息BufferedReader in = new BufferedReader(new InputStreamReader(socketConn.getInputStream()));// 接收服务器发送内容的输入流System.out.println("服务器信息:" + in.readLine());System.out.println("服务器信息:" + in.readLine());System.out.println("请输入>");boolean done = false;while (!done) {String line = stdin.readLine();// 获得从键盘输入的每行字符out.println(line);// 发送到服务器端 --该处的print要加ln,否则就会无法往服务器端传递消息if (line.equalsIgnoreCase("exit")) // 读到exit则结束循环done = true;String info = in.readLine(); // 从服务器读取字符串System.out.println("服务器信息:" + info);// 显示从服务器发送来的数据if (!done)System.out.println("请输入>");}socketConn.close(); // 关闭资源} catch (SecurityException e) {System.out.println("连接服务器出现安全问题!"+e.getMessage());} catch (IOException e) {System.out.println("连接服务器出现I/O问题!"+e.getMessage());}}
}public class TextSocketClient {// Socket客户端类public static void main(String[] args) {try {new Client("localhost", 8080); // IP地址为本机,端口为8080} catch (Exception e) {System.out.println("测试客户端连接出错:" + e.getMessage());}}
}
客户端程序运行截图
socketConn = new Socket(InetAddress.getLocalHost(), port);// 创建本地Socket连接
String line = stdin.readLine();// 获得从键盘输入的每行字符out.println(line);// 发送到服务器端 --该处的print要加ln,否则就会无法往服务器端传递消息
Java网络编程笔记(三):点对点通信(Socket基于TCP协议)相关推荐
- {网络编程}和{多线程}应用:基于TCP协议【实现多个客户端发送文件给一个服务器端】--练习
要求: 实现多个客户端发送文件给一个服务器端提示:多个人创建客户端发送文件,服务端循环接收socket,从socket中获取文件 说明:这里我们只要建立一个服务端就可以了,然后让多台电脑使用客户端给这 ...
- Java网络编程笔记5
在Java网络编程笔记4中我们看到了客户端与服务器通信的过程,只是在前面的程序只是单个客户端与服务器通信 的例子. 接下来我们看如何实现多个客户端与服务器通信,对于服务器来说,它要为每个客户端请求的S ...
- java网络编程的三要素
1.IP地址,是设备的标识.Java学习笔记http://www.mobiletrain.org/note/java/ 要想让网络中的计算机能相互通信,必须为每台计算机指定一个标识号,通过此标识号来指 ...
- 网络编程知识预备(3) ——SOCKET、TCP、HTTP之间的区别与联系
参考:SOCKET,TCP,HTTP之间的区别与联系 作者:丶PURSUING 发布时间: 2021-03-19 11:54:01 网址:https://blog.csdn.net/weixin_44 ...
- Java网络编程笔记
Java网络编程 14-1 网络编程概述 14-2 网络通信要素概述 14-3 通信要素一:IP和端口号 InetAddress类测试 14-4 通信要素二:网络协议 14-5 TCP网络编程 TCP ...
- Java网络编程笔记4
Socket和ServerSocket,网络编程可以分为创建Socket.打开连接Socket的输入流和输出流,对Socket进行编程,关闭Socket. 创建Socket 一个功能齐全的Socket ...
- 互联网学习(三):基于TCP协议的HTTP协议
2007年,HTTPbis工作组的成立部分是为了修订和澄清HTTP / 1.1规范.2014年6月,工作组发布了一份更新的六部分规范,废弃了RFC 2616: RFC 7230,HTTP / 1.1: ...
- java网络编程(三)
文章推荐 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 1.2.3 TCP编程 按照前面的介绍,网络通讯的方式有TCP和UDP两种,其中TCP方式的网络通 ...
- Java基础 - 网络编程 - InetAddress类、Socket(TCP)举例使用
文章目录 InetAddress类 相关方法 代码举例 Socket 基本介绍 基本介绍2 应用案例(TCP字节流) 应用案例2(TCP字节流) 注意(结束标记) 应用案例3(TCP字符流) 注意(结 ...
- Java网络编程笔记1
网络编程的基础知识 什么叫计算机网络,就是把分布在不同地理区域的计算机与专门的外部设备通信线路互连成一个规模大.功能强的网络系统. 计算机网络主要能做些以下功能: 1)资源共享 2)信息传输与集中处理 ...
最新文章
- UVa 311 - Packets
- Apache Spark源码走读之16 -- spark repl实现详解
- 第8章防范式编程上(代码大全3)
- 方便的管理苹果Mac上菜单栏图标软件推荐:Bartender
- 如何在 Mac 上控制对摄像头的访问?
- 智能直播审核方案:视频云智能业务截帧策略
- DB2数据库下载(v9.7/v10.5/v11.1)
- 软件的开发模型之瀑布型和快速原型
- 计算机表格填充,Excel表格的自动填充功能
- PyTorch | torch.manual_seed(1)是什么意思?torch随机数manual_seed(1)有什么用?如何理解torch.manual_seed(1)
- SX1278、SX1276、SX1262的简单详解
- 医疗图像处理与深度学习(二)
- 车企如何趟过「软件的坑」,大众集团或将在中国寻求收购
- 分布式配置管理平台Disconf
- a标签 rel属性
- 大型门户网站建设需要那些技术和注意事项
- 情感溢出:读《浣溪沙》
- 用matlab代码实现QDA,matlab数据库
- 如何摆脱打工人?注册申请163邮箱?尊享TOM VIP微信办公助手?
- 6.S081 Lab4 Traps