Socket编程——TCP协议

本文介绍TCP协议的特点及其实现用户登录的过程。包括客户端和服务端的建立连接、数据交互及验证流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-------------------------------------------------------------------------------------------------------------------
TCP通讯协议特点:
 1. tcp是基于IO流进行数据 的传输 的,面向连接。
  2. tcp进行数据传输的时候是没有大小限制的。
  3. tcp是面向连接,通过三次握手的机制保证数据的完整性。 可靠协议。
  4. tcp是面向连接的,所以速度慢。
  5. tcp是区分客户端与服务端 的。
  
  例: 打电话、 QQ文件传输、 迅雷下载....
  
tcp协议下的Socket:
 Socket(客户端) , tcp的客户端一旦启动马上要与服务端进行连接。
 ServerSocket(服务端类)
tcp的客户端使用步骤:
 1. 建立tcp的客户端服务。
 2. 获取到对应的流对象。
 3.写出或读取数据
 4. 关闭资源。
ServerSocket的使用 步骤
 1. 建立tcp服务端 的服务。
 2. 接受客户端的连接产生一个Socket.
 3. 获取对应的流对象读取或者写出数据。
 4. 关闭资源。
-------------------------------------------------------以上转自网络---------------------------------------------------

TCP模拟用户登陆

客户端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;

public class TCPSocket_Client {

	public static void getwrite(Socket socket,BufferedReader br,String option) throws IOException{
		
		OutputStreamWriter outputstream=new OutputStreamWriter(socket.getOutputStream());
		System.out.println("请输入用户名:");
		String user=br.readLine();
		System.out.println("请输入密码:");
		String password=br.readLine();
		String info=option+" "+user+" "+password+"\r\n";
		outputstream.write(info);
		outputstream.flush();
	}
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		Socket socket=new Socket(InetAddress.getByName("127.0.0.1"), 9090);
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		BufferedReader sbr=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		String option=br.readLine();
		getwrite(socket, br, option);
		String recall=sbr.readLine();
		System.out.println(recall);						
	}

}

服务端:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;

public class TCPSocket_Server extends Thread{
	Socket socket;
	static File file=new File("C:\\pro.properties");
	public TCPSocket_Server(Socket socket) throws IOException {
		this.socket=socket;// TODO Auto-generated constructor stub	
	}
	static{
		if(!file.exists()){
			try {
				file.createNewFile();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	public void run(){
		try {
			OutputStreamWriter output=new OutputStreamWriter(socket.getOutputStream());
		    BufferedReader sbr=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		    String info=sbr.readLine();
		    String[] datas=info.split(" ");
		    String option=datas[0];
		    String user=datas[1];
		    String password=datas[2];
		    Properties pro=new Properties(); 
		    pro.load(new FileReader(file));
		    if("a".equalsIgnoreCase(option)){
		    	
				if (!pro.containsKey(user)) {
					pro.setProperty(user, password);
					output.write("注册成功!\r\n");
				}
				else{
					output.write("用户名已存在!\r\n");
				}
		    }
		    else if("b".equalsIgnoreCase(option)){
		    	if(pro.containsKey(user)){
		    		String pw=pro.getProperty(user);
		    		if(pw.equals(password)){
		    			output.write("登陆成功!\r\n");
		    		}else{
		    			output.write("密码错误!\r\n");
		    		}
		    	}else{
		    		output.write("用户名不存在!\r\n");
		    	}
		    }
		    output.flush();
		    pro.store(new FileWriter(file), "pro");		    	    
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}
	
	public static void main(String[] args) throws IOException {
		ServerSocket serversocket=new ServerSocket(9090);
		while(true){
			Socket socket=serversocket.accept();
			new TCPSocket_Server(socket).run();
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值