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(); 

 
} 

 
} 

 
}