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