基础知识
使用java Socket编程时java网络编程中最常用的方式,而且步骤一般都是固定的。
对客户端具体来讲,分以下几步:
1.建立客户端Socket
//使用本机回环地址来测试,端口使用 10000
Socket socket = new Socket("127.0.0.1",10000);
2.从Socket中获取数据流并封装数据流
//使用缓冲流加快速度
BufferedReader bReader = null;
bReader= new BufferedReader(new FileReader(file));
3.得到流中数据
//每次读取一行数据 readLine()
String line = null;
line = bReader.readLine();
4.释放资源
if(bReader!=null)
bReader.close();
if(socket!=null)
socket.close();
对服务器端来讲:
1.建立服务器端Socket,并监听一个客户端 端口
//创建socket的同时监听客户端 端口
ServerSocket sSocket = null;
sSocket = ServerSocket(10000);
2.获得连接过来的客户端Socket
Socket socket = sSocket.accept();
3.封数据流并向客户端写数据
BufferdeWriter bWriter = null;
bWriter = new BufferedWriter(new
FileWriter(socket.getOutputStream()));
bWriter.write("你好");
4.释放资源
if(bWriter!=null)
bWriter.close();
if(socket!=null)
socket.close();
//注意:服务器 sSocket不用关闭
代码完整示例 ##
/*
这两个程序可以从本地客户端把一个文件上传到服务器端
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
//客户端
public class TCPClient {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("src\\com\\briup\\upload\\TCPServer.java");
Socket socket = null;
BufferedReader bReader = null;
PrintWriter pWriter = null;
try {
socket = new Socket("127.0.0.1", 10010);
bReader = new BufferedReader(new FileReader(file));
pWriter = new PrintWriter(socket.getOutputStream(),true);
String line = null;
while((line=bReader.readLine())!=null){
pWriter.println(line);
}
//关闭客户端的输出流,相当于给流做了一个结束标记
socket.shutdownOutput();
BufferedReader bReaderSocket = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String endFlag = bReaderSocket.readLine();
System.out.println(endFlag);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(pWriter!=null)
pWriter.close();
try {
if(bReader!=null)
bReader.close();
if(socket!=null)
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
//服务器端
public class TCPServer {
private static int num = 1;
public static void main(String[] args) {
// TODO Auto-generated method stub
ServerSocket serverSocket = null;
BufferedReader bReader = null;
PrintWriter pWriter = null;
BufferedWriter bWriteSocket = null;
Socket socket = null;
File file = new File("src\\com\\briup\\upload\\upload_copy.txt");
if (file.exists()) {
throw new RuntimeException("文件已經存在!");
// System.out.println("该文件已存在,将更改文件名为upload_copy"+(num++)+".txt后开始上传!");
// file = new File("src\\com\\briup\\upload\\upload_copy"+(num)+".txt");
}
try {
serverSocket = new ServerSocket(10010);
socket = serverSocket.accept();
String ip = socket.getInetAddress().getHostAddress();
System.out.println(ip + "鏈接成功!");
bReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pWriter = new PrintWriter(new FileWriter(file, true));
String line = null;
while ((line = bReader.readLine()) != null) {
pWriter.println(line);
pWriter.flush();
}
// 这个循环如果没有读到结束标记的话是不会停止的
PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
printWriter.println("上傳成功呢!!");
printWriter.println();
printWriter.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (bWriteSocket != null)
try {
bWriteSocket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (pWriter != null)
pWriter.close();
try {
if (bReader != null)
bReader.close();
if (socket != null)
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}