JAVA之Socket编程(技术总结)
1、socket编程实例1--Socket客户端(字符串)->请求到Socket服务端->响应客户端:
代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* Socket客户端
* @author wangbf
* @date 2015-10-30
*/
public class ClientStringSocket {
public static void main(String[] args) {
try {
// 创建socket对象,指明需要连接的服务器的地址和端口号
Socket socket = new Socket("localhost", 8888);
// 连接建立后,通过输出流向服务器端发送请求
OutputStream os = socket.getOutputStream();
// 将输出流封装成打印流
PrintWriter pw = new PrintWriter(os);
pw.write("用户名:王菲,密码:1245abc");
pw.flush();
socket.shutdownOutput();
// 获取服务端的输入流(字节流)
InputStream in = socket.getInputStream();
// 将字节流转为字符流
InputStreamReader isr = new InputStreamReader(in);
// 为字符输入流添加缓冲
BufferedReader br = new BufferedReader(isr);
String data = br.readLine();
while (data != null) {
System.out.println("get Server's data:" + data);
data = br.readLine();
}
socket.shutdownInput();
// 关闭相应资源
br.close();
isr.close();
in.close();
pw.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Socket服务端
* @author wangbf
* @date 2015-10-30
*/
public class SerStringSocket {
public static void main(String[] args) {
try {
// 创建ServerSocket对象,绑定监听端口
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("***服务器即将启动,等待客户端的连接***");
// 通过accept()方法监听客户端请求
Socket socket = serverSocket.accept();
// 建立连接后,通过输入流读取客户端发送的请求信息(字节流)
InputStream is = socket.getInputStream();
// 将字节输入流转为字符输入流
InputStreamReader isr = new InputStreamReader(is);
// 为字符输入流添加缓冲
BufferedReader bufReader = new BufferedReader(isr);
String data = bufReader.readLine();
while (data != null) {
System.out.println("服务端获取客户端用户的信息->" + data);
data = bufReader.readLine();
}
socket.shutdownInput();
// 获取输出流
OutputStream os = socket.getOutputStream();
// 将输出流封装成打印流
PrintWriter pw = new PrintWriter(os);
pw.write("欢迎您,你已成功登陆!");
pw.flush();
socket.shutdownOutput();
// 关闭相关资源
pw.close();
os.close();
bufReader.close();
isr.close();
is.close();
is.close();
socket.close();
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2、socket编程实例2--Socket客户端(对象)->请求到Socket服务端->响应客户端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* Socket客户端
* @author wangbf
* @date 2015-10-30
*/
public class ClientObjectSocket {
public static void main(String[] args) {
try {
// 创建socket对象,指明需要连接的服务器的地址和端口号
Socket socket = new Socket("localhost", 8888);
// 连接建立后,通过输出流向服务器端发送请求
OutputStream os = socket.getOutputStream();
ObjectOutputStream obs = new ObjectOutputStream(os);
User user = new User();
user.setName("唐飞");
user.setPwd("123456");
obs.writeObject(user);
obs.flush();
socket.shutdownOutput();
// 获取服务端的输入流(字节流)
InputStream in = socket.getInputStream();
// 将字节流转为字符流
InputStreamReader isr = new InputStreamReader(in);
// 为字符输入流添加缓冲
BufferedReader br = new BufferedReader(isr);
String data = br.readLine();
while (data != null) {
System.out.println("get Server's data:" + data);
data = br.readLine();
}
socket.shutdownInput();
// 关闭相应资源
br.close();
isr.close();
in.close();
os.close();
obs.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Socket服务端
* @author wangbf
* @date 2015-10-30
*/
public class SerObjectSocket {
public static void main(String[] args) {
try {
// 创建ServerSocket对象,绑定监听端口
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("***服务器即将启动,等待客户端的连接***");
// 通过accept()方法监听客户端请求
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
User user = (User) ois.readObject();
socket.shutdownInput();
// 获取输出流
OutputStream os = socket.getOutputStream();
// 将输出流封装成打印流
PrintWriter pw = new PrintWriter(os);
pw.write("欢迎您《"+user.getName()+"》,你已成功登陆!");
pw.flush();
socket.shutdownOutput();
// 关闭相关资源
pw.close();
os.close();
ois.close();
is.close();
socket.close();
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3、socket编程实例3--Socket客户端读取文本内容->Socket客户端(转化为输出流)->请求到Socket服务端->响应客户端:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
/**
* Socket客户端
* @author wangbf
* @date 2015-10-30
*/
public class ClientFileSocket {
public static void main(String[] args) {
try {
// 读取D盘中的data.txt文本
File file = new File("D:\\data.txt");
// 把读取的data.txt文本内容,并转为字节流
InputStream inStream = new FileInputStream(file);
// 将字节流转为字符流
InputStreamReader iReader = new InputStreamReader(inStream,"utf-8");
// 为字符流添加缓冲
BufferedReader bReader = new BufferedReader(iReader);
// 一行一行读取文本内容
String fileDate = bReader.readLine();
StringBuffer buffer = new StringBuffer();
while(fileDate != null) {
buffer.append(fileDate);
System.out.println(fileDate);
fileDate = bReader.readLine();
}
// 创建socket对象,指明需要连接的服务器的地址和端口号
Socket socket = new Socket("localhost", 8888);
// 连接建立后,通过输出流向服务器端发送请求
OutputStream os = socket.getOutputStream();
PrintWriter pWriter = new PrintWriter(os);
pWriter.write(buffer.toString());
pWriter.flush();
socket.shutdownOutput();
// 获取服务端的输入流(字节流)
InputStream in = socket.getInputStream();
// 将字节流转为字符流
InputStreamReader isr = new InputStreamReader(in);
// 为字符输入流添加缓冲
BufferedReader br = new BufferedReader(isr);
String data = br.readLine();
while (data != null) {
System.out.println("get Server's data:" + data);
data = br.readLine();
}
socket.shutdownInput();
// 关闭相应资源
br.close();
isr.close();
in.close();
pWriter.close();
os.close();
socket.close();
bReader.close();
iReader.close();
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Socket服务端
* @author wangbf
* @date 2015-10-30
*/
public class SerFileSocket {
public static void main(String[] args) {
try {
// 创建ServerSocket对象,绑定监听端口
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("***服务器即将启动,等待客户端的连接***");
// 通过accept()方法监听客户端请求
Socket socket = serverSocket.accept();
// 建立连接后,通过输入流读取客户端发送的请求信息(字节流)
InputStream is = socket.getInputStream();
// 将字节输入流转为字符输入流
InputStreamReader isr = new InputStreamReader(is);
// 为字符输入流添加缓冲
BufferedReader bufReader = new BufferedReader(isr);
String data = bufReader.readLine();
while (data != null) {
System.out.println("服务端获取客户端用户的信息->" + data);
data = bufReader.readLine();
}
socket.shutdownInput();
// 获取输出流
OutputStream os = socket.getOutputStream();
// 将输出流封装成打印流
PrintWriter pw = new PrintWriter(os);
pw.write("欢迎您,你已成功登陆!");
pw.flush();
socket.shutdownOutput();
// 关闭相关资源
pw.close();
os.close();
bufReader.close();
isr.close();
is.close();
is.close();
socket.close();
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4、补充:通过流从指定位置读取文档内容,和把读取的文档写出到指定的文档中
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class FileStream {
public static void main(String[] args) {
try {
/**
* 把文本从D盘读出来
*/
File file = new File("D:\\data.txt");
// 获取文件的字节流
InputStream iStream = new FileInputStream(file);
// 把字节流转为字符输入流
InputStreamReader iReader = new InputStreamReader(iStream,"utf-8");
// 为字符输入流添加缓冲
BufferedReader bReader = new BufferedReader(iReader);
// 按行读取文本并输出
String data = bReader.readLine();
StringBuffer buffer = new StringBuffer();
while(data != null) {
System.out.println(data);
buffer.append(data);
data = bReader.readLine();
}
/**
* 把读出来的文档写入E盘中的data1.txt中
*/
// 读取字符流
FileReader fileReader = new FileReader(file);
// 为字符流添加缓冲
BufferedReader bufferedReader = new BufferedReader(fileReader);
// 创建一个向指定 File对象表示的文件中写入数据的文件输出流
FileOutputStream fStream = new FileOutputStream("E:\\data1.txt");
OutputStreamWriter oStreamWriter = new OutputStreamWriter(fStream,"UTF-8");
String str = bufferedReader.readLine();
while(str != null) {
oStreamWriter.write(str);
oStreamWriter.write("\n");
str = bufferedReader.readLine();
}
oStreamWriter.close();
fStream.close();
bufferedReader.close();
bReader.close();
iReader.close();
iStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
JAVA之Socket编程(技术总结)相关推荐
- TCP:利用Socket编程技术实现客户端向服务端上传一个图片。
问题: 利用Socket编程技术实现客户端向服务端上传一个图片的程序. 客户端: import java.io.*; import java.net.Socket;public class clien ...
- api有哪些 javasocket_基于java的socket编程及API解析
一.socket通讯过程 1.socket与socket编程简介: socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台 ...
- 高级Socket编程技术
高级Socket编程技术 实验目的 1.了解阻塞与非阻塞模式Socket编程的工作原理. 2.了解Socket编程的5种模型的工作原理和使用方法. 3.掌握Select模型和WSAAsyncSelec ...
- java运用网络编程技术代码_Java 网络编程
java网络编程 1.什么叫计算机网络? 由不同地理位置的不同计算机主机,连接起来组成的网络. 2.什么叫网络编程? 在网络的基础上,使用网络进行编程,对应用层进行设计的活动. 3.网络编程三要素:I ...
- Java 网络 socket 编程
使用套接字实现基于 TCP 协议的服务器和客户机程序 依据 TCP 协议,在 C/S 架构的通讯过程中,客户端和服务器的 Socket 动作如下: 客户端: 1.用服务器的 IP 地址和端口号实例化 ...
- Java的Socket编程
socket编程一般指的就是网络编程,常见的服务端和客户机都是必不可少的,今天小千就来给大家介绍一下socket编程中常见的概念问题. 一.常见传输协议 1.tcp协议TCP (Transmissio ...
- java中socket编程实例_Java中socket编程的实现过程(代码实例)
本篇文章给大家带来的内容是关于socket编程的实现过程,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.socket 服务器搭建 实例化socket服务器,循环获取请求packa ...
- Java基于socket编程实现局域网内简单通信
运行客户端程序将创建一个客户端套接字,并与指定的服务器建立连接,接收了服务端发来的消息后关闭连接.服务端启动后会循环接收客户端连接,在接收到连接后,向该客户端发送 "Hello World! ...
- Java NIO Socket编程实例
各I/O模型优缺点 BIO通信模型 BIO主要的问题在于每当有一个新的客户端请求接入时,服务端必须创建一个新的线程处理新接入的客户端链路,一个线程只能处理一个客户端连接 线程池I/O编程 假如所有可用 ...
最新文章
- mysql数据库对时间的函数吗_mysql 数据库 时间函数
- Ogitor的编译配置全过程
- LiveVideoStack主编观察回归 05/
- linux运维决心书!
- 如何用append连接html文件,jquery append()怎么用?
- 解决SpringBoot jar包太大的问题
- iOS 使用符号断点定位警告约束警告-[LayoutConstraints] Unable to simultaneously satisfy constrai...
- 建立网站需要什么条件_教育学校网站建设有什么作用?学校建立网站为的是什么?...
- 删除Word模板文件
- 成为excel高手必须掌握的54个函数
- LeetCode 热题 HOT 100 -------31. 下一个排列(数组,数学问题)128. 最长连续序列(数组) 11. 盛最多水的容器(数组) 621. 任务调度器 (数组)
- 光纤中的多种光学模式芯径_光纤的结构是什么?种类有哪些?该怎么选择?
- select 之分组查询
- Linux CentOS(常用命令)
- ORA-10456 ORA-01219
- 【FatFs】手动移植FatFs,将SRAM虚拟U盘
- MATLAB处理.nii格式文件(.nii转换为.jpg格式)
- Multisim基础 LC并联选频电路
- Java中的类和对象
- 干活的累死累活,数据分析师最后还要会写PPT的5条原则
热门文章
- 成员变量、类变量、局部变量的区别
- 基于mmcls的车辆属性识别
- 工业软件:一文讲透国内外MES/MOM市场格局,主流厂商及其优势行业
- 思科三层交换机vlan的划分
- android 执行shell root权限,Android App 获取root权限后,执行shell命令
- java ssm高校田径运动会成绩管理系统
- Android融云自定义表情
- 用matlab做空间计量模型,MATLAB 空间计量模型的实现
- atoi,itoi,atol,strtol, strtod函数转换
- Ubuntu 20.10安装Flashplay插件