socket编程(一)--简单的socket编程实例

需求描述:在客户端获取远程服务器某文件的内容

客户端程序如下:

package com.socket.clientsocket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Sclient {

	/**
	 * @param args
	 */
	
	protected BufferedReader socketReader;
	protected PrintWriter socketWriter;
	protected String hostIp;
	protected int hostPort;
	
	
	public Sclient(String ahostIp,int ahostPort){
		this.hostIp = ahostIp;
		this.hostPort = ahostPort;
		
	}
	public void setUpConnection(){
	
		try {
			//1.创建Socket,建立连接
			Socket socket = new Socket(hostIp,hostPort);
			//2.获取输入流和输出流,并进行封装
			socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			socketWriter = new PrintWriter(socket.getOutputStream());
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	public void tearDownConnection(){
		
		try {
			socketReader.close();
			socketWriter.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
	}
	//根据需求,对流进行处理
	public String getFile(String fileNameToGet){
		StringBuffer sb = new StringBuffer();
		socketWriter.println(fileNameToGet);
		socketWriter.flush();
		String line = null;
		try {
			while((line = socketReader.readLine()) != null){
				sb = sb.append(line + "\n");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return sb.toString();
	}
	public static void main(String[] args) {
		//创建客户端
		Sclient client = new Sclient("198.27.0.166",8200);
		//建立连接
		client.setUpConnection();
		//需求操作
		String content = client.getFile("c:\\log.txt");
		//关闭连接
		client.tearDownConnection();
	}

}

 服务器端的程序如下:

package com.socket.serversocket;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Sserver {
	public static void main(String[] args){
		//创建服务器端
		Sserver s = new Sserver(3000);
		//监听连接
		s.acceptConnections();
	}
	int listenPort;
	public Sserver(int alistenPort){
		this.listenPort = alistenPort;
	}
	public void acceptConnections(){
		
		try {
			ServerSocket server = new ServerSocket(listenPort);
			Socket incomingConnection = null;
			while (true) {
                incomingConnection = server.accept();
                handleConnection(incomingConnection);
            }

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void handleConnection(Socket incomingConnection){
		
		try {
			//获取输入流跟输出流,并进行封装
			InputStream inputFromSocket = incomingConnection.getInputStream();
			OutputStream outputToSocket = incomingConnection.getOutputStream();
			BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputFromSocket));
			//接收客户端讯息
			FileReader fileReader = new FileReader(new File(streamReader.readLine()));
			BufferedReader bufferedFileReader = new BufferedReader(fileReader);
			PrintWriter streamWriter = new PrintWriter(outputToSocket);
			String line = null;
			//将文件中的内容写入客户端
			while((line = bufferedFileReader.readLine()) != null){
				streamWriter.println(line);
			}
			
			streamReader.close();
			fileReader.close();
			streamWriter.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值