基于TCP的socket通信简单示例(Java)

Socket通信的一般步骤如下:

1、创建Socket和ServerSocket

2、打开连接到Socket的输入/输出流

3、按照相应的协议对Socket进行读/写操作

4、关闭输入/输出流,关闭Socket

基于TCP协议的Socket通信的步骤(分为服务器和客户端):

服务器:

1、创建ServerSocket,绑定一个监听端口

2、通过accept()方法监听客户端请求

3、建立连接后,通过输入流读取客户端数据,通过输出流向客户端发送数据

4、关闭输入/输出流,关闭Socket

客户端:

1、创建Socket,需要指明服务器的IP地址和端口号

2、建立连接后,通过输出流向服务器发送数据,通过输入流读取服务器的响应信息

3、关闭输入输出流,关闭Socket

基于TCP协议的Socket通信示例:

服务器(ServerSocket):

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.io.Reader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

	public static void main(String[] args) throws IOException {
		//监听端口号30001的客户端请求,
		ServerSocket ss=new ServerSocket(30001);
		int count=0;
		while(true){
			Socket s=ss.accept();
			//读取客户端数据
			BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream(), "utf-8"));
			String cs=br.readLine();
			s.shutdownInput();
			
			//向客户端写入数据(文件)
			File file=null;
			if(cs.equals("a") || cs.equals("b")){
				file=new File("./src/sources/"+cs+".txt");				
			}
			else{
				if(cs.equals("a.txt") || cs.equals("b.txt")){
					file=new File("./src/sources/"+cs);
				}
				else{
					continue;//请求的资源不存在
				}
			}
			char[] b=new char[1024];
			int len=-1;
			Reader reader=new FileReader(file);
			PrintWriter pw=new PrintWriter(s.getOutputStream());
			while((len=reader.read(b))!=-1){
				pw.write(b, 0, len);				
			}
			pw.flush();//一定要刷新缓冲区将数据输出
			s.shutdownOutput();
			System.out.println("服务器执行完毕");
			
			br.close();
			reader.close();
			pw.close();			
			s.close();
			
			count++;
			//服务器处理100000次请求之后关闭ServerSocket
			if(count>100000) break;
		}		
		ss.close();
	}

}

客户端(Socket):

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

public class Client {

	public static void main(String[] args) throws UnknownHostException, IOException {
		//与服务器建立socket通信,"192.168.31.78"表示服务器IP地址,30001是端口号
		Socket socket=new Socket("192.168.31.78", 30001);
		PrintWriter pw=new PrintWriter(socket.getOutputStream());
		pw.write("b.txt");//请求b.txt文件
		pw.flush();//刷新缓冲区,将数据输出
		socket.shutdownOutput();//客户端数据传输完毕后必须关闭输出流
		
		//读取服务器数据,将数据写入到本地文件
		int len=-1;
		char[] chs=new char[1024];
		BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
		File file=new File("./src/sources/b.txt");
		Writer wr=new FileWriter(file);
		while((len=br.read(chs))!=-1){
			wr.write(chs, 0, len);
		}
		socket.shutdownInput();

		pw.close();
		br.close();
		wr.close();		
		socket.close();
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值