JAVA之Socket编程(技术总结)

来源:互联网 发布:大疆视频剪辑软件 编辑:程序博客网 时间:2024/05/20 04:09
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();
}
}
}




0 0
原创粉丝点击