基于TCP协议实现模拟用户登录的简单Java实例

上一篇博客中,我们了解了基于UDP协议下的发送与接收信息并完成了简单的java代码实现工作,也在其中引用了一些前辈的博客来区分了UDP协议和TCP协议。那么今天咱们就一起来看一下基于TCP协议完成数据的发送与接收服务。

关于UDP的java实例可以戳基于UDP协议发送和接收信息的简单Java实例

主要步骤如下:

1、客户端发送数据

2、服务端接收数据

3、服务端转换数据

4、服务端发出数据

5、客户端接收数据

因为客户端发送数据和服务端接收数据以及客户端接收数据和UDP协议中的是一致的,包括创建Socket对象,创建数据,发送数据,接收数据等;因此便不再这里过多赘述,如有需要可查看上方UDP中内容,这里有详细步骤,剩下的我们在注释中体现。

客户端代码:

package com.zzxtit.tcp;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

/**
*author 秦飞阳
*/
public class UserClient {
	
	public static void main(String[] args) throws IOException {

		//创建客户端Socket对象
		Socket s =  new Socket("127.0.0.1", 8888);
		//创建输入流对象,读取键盘录入的信息
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		System.out.println("请输入用户名");
		String username = br.readLine();
		System.out.println("请输入密码");
		String password = br.readLine();
		
	//	PrintWriter out = new PrintWriter(s.getOutputStream(),true);
		//创建输出流对象
		BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		//将键盘录入的字符串输出到服务端
		out.write(username);
		out.write(password);
		//创建输入流对象,接收服务端发送过来的数据
		BufferedReader serverBr = new BufferedReader(new InputStreamReader(s.getInputStream()));
		//读取内容
		String result = serverBr.readLine();
		//输出结果
		System.out.println(result);
		//关闭资源
		s.close();
	}

}

服务端代码:

package com.zzxtit.tcp;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
*author 秦飞阳
*/
public class UserServer {
	
	public static void main(String[] args) throws IOException {
		
		//创建服务端Socket对象
		ServerSocket ss = new ServerSocket(8888);
		//接收对象,用到了accept方法
		Socket s = ss.accept();
		//创建输入流对象,接收来自客户端的数据内容
		BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
		//获取内容
		String username = br.readLine();
		String passeord = br.readLine();
		//判断是否正确
		boolean flag = false;
		if("manxiaoyu".equals(username)&&"123456".equals(passeord)) {
			flag = true;
		}
	//	PrintWriter out = new PrintWriter(s.getOutputStream(),true);
		//创建输出流对象
		BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		//将登陆结果输出到客户端
		if (flag) {
			out.write("登录成功");
		} else {
			out.write("登录失败");
		}
		//关闭资源
		s.close();
		//ss.close();
	}
}

好了,结束,在这里需要注意的和UDP差不多,但又有所区别:

1、端口不能重复绑定,否则会报错cannot bind 

2、因为是建立连接的,所以可以"实时通信",如完成字母大小写转换,登录,注册等

3、在创建输出流对象的时候可以使用BufferedWriter,也可以使用PrintWriter,只是后者自带换行,且方法要用print

下面有一个基于tcp实现用户输入一个字符串,服务端返回一个相应大写字符串的案例,大家如果感兴趣可以看一看

你可能感兴趣的:(常见问题与解决办法,javaEE,程序人生)