TCP通信协议基本操作
* 创建服务器
* 1,指定端口,使用SeverSocket创建服务器
* 2,阻塞式等待连接accept()
* 3,操作:输入输出操作
* 4,释放资源
1 package cn.ftf.tpc;
2
3 import java.io.DataInputStream;
4 import java.net.ServerSocket;
5 import java.net.Socket;
6
7 /**
8 * 创建服务器
9 * 1,指定端口,使用SeverSocket创建服务器
10 * 2,阻塞式等待连接accept()
11 * 3,获取流,IO操作
12 * 4,释放资源
13 * @author 房廷飞
14 *
15 */
16 public class Sever {
17 public static void main(String[] args) throws Exception {
18 System.out.println("------Server------");
19 //1,指定端口,使用SeverSocket创建服务duan
20 ServerSocket server = new ServerSocket(8555);
21 //* 2,阻塞式等待连接accept()
22 Socket client=server.accept();
23 System.out.println("一个客户端创建了连接!");
24 //* 3,操作:输入输出操作
25 DataInputStream dis=new DataInputStream(client.getInputStream());
26 String data=dis.readUTF();
27 System.out.println(data);
28 //4,关闭资源
29 dis.close();
30 server.close();
31 }
32 }
创建客户端
* 1,创建连接:使用Socket类创建客户端+服务的地址和端口
* 2,获取流,IO流操作
* 3,释放资源
1 package cn.ftf.tpc;
2
3 import java.io.DataOutputStream;
4 import java.io.IOException;
5 import java.net.Socket;
6 import java.net.UnknownHostException;
7
8 /**
9 * 熟悉流程,创建客户端
10 * 1,创建连接:使用Socket类创建客户端+服务的地址和端口
11 * 2,获取流,IO流操作
12 * 3,释放资源
13 * @author 房廷飞
14 *
15 */
16 public class Client {
17 public static void main(String[] args) throws Exception, IOException {
18 System.out.println("------Client------");
19 //1,创建连接:使用Socket类创建客户端+服务的地址和端口
20 Socket client=new Socket("localhost",8555);
21 //2,获取流,IO流操作
22 DataOutputStream dos=new DataOutputStream(client.getOutputStream());
23 String data="hello world!";
24 dos.writeUTF(data);
25 dos.writeUTF(" hello wordhelloword");
26 dos.flush();
27 //3,释放资源
28 dos.close();
29 client.close();
30 }
31 }
应用:模拟登陆,双向传信息
LoginServer.java
1 package cn.ftf.tpc;
2
3 import java.io.DataInputStream;
4 import java.io.DataOutputStream;
5 import java.net.ServerSocket;
6 import java.net.Socket;
7
8 /**
9 * 创建服务器
10 * 1,指定端口,使用SeverSocket创建服务器
11 * 2,阻塞式等待连接accept()
12 * 3,操作:输入输出操作
13 * 4,释放资源
14 * @author 房廷飞
15 *
16 */
17 public class LoginSever {
18 public static void main(String[] args) throws Exception {
19 System.out.println("------Server------");
20 String uname=null;
21 String upwd=null;
22
23 //1,指定端口,使用SeverSocket创建服务端
24 ServerSocket server = new ServerSocket(8555);
25 //* 2,阻塞式等待连接accept()
26 Socket client=server.accept();
27 System.out.println("一个客户端创建了连接!");
28 //* 3,操作:输入输出操作
29 DataInputStream dis=new DataInputStream(client.getInputStream());
30 String data=dis.readUTF();
31 //分析
32 String[] dataArray=data.split("&");
33 for(String info:dataArray) {
34 String[] userInfo=info.split("=");
35 System.out.println(userInfo[0]+"-->"+userInfo[1]);
36 if(userInfo[0].equals("uname")) {
37 uname=userInfo[1];
38 }else {
39 upwd=userInfo[1];
40
41 }
42
43 }
44 if(uname.equals("房廷飞")&&upwd.equals("ftf111")) {
45 System.out.println("登陆成功!");
46 DataOutputStream dos=new DataOutputStream(client.getOutputStream());
47 dos.writeUTF("登陆成功!");
48 dos.flush();
49 //3,释放资源
50 dos.close();
51 }else {
52 DataOutputStream dos=new DataOutputStream(client.getOutputStream());
53 dos.writeUTF("登陆失败,用户名或密码错误!!");
54 System.out.println("登陆失败!");
55 dos.flush();
56 dos.close();
57 }
58 //4,关闭资源
59 dis.close();
60 server.close();
61 }
62 }
LoginClient.java
package cn.ftf.tpc;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
* 1,创建连接:使用Socket类创建客户端+服务的地址和端口
* 2,获取流,IO流操作
* 3,释放资源
* @author 房廷飞
*
*/
public class LoginClient {
public static void main(String[] args) throws Exception, IOException {
System.out.println("------Client------");
BufferedReader console=new BufferedReader(new InputStreamReader(System.in));
String uname=console.readLine();
String upwd=console.readLine();
//1,创建连接:使用Socket类创建客户端+服务的地址和端口
Socket client=new Socket("localhost",8555);
//2,获取流,IO流操作
DataOutputStream dos=new DataOutputStream(client.getOutputStream());
dos.writeUTF("uname="+uname+"&"+"upwd="+upwd);
dos.flush();
DataInputStream dis=new DataInputStream(client.getInputStream());
String result=dis.readUTF();
System.out.println(result);
//3,释放资源
dos.close();
client.close();
}
}
应用:上传文件
FileServe.java
1 package cn.ftf.tpc;
2
3 import java.io.BufferedInputStream;
4 import java.io.BufferedOutputStream;
5 import java.io.DataInputStream;
6 import java.io.FileInputStream;
7 import java.io.FileOutputStream;
8 import java.io.InputStream;
9 import java.io.OutputStream;
10 import java.net.ServerSocket;
11 import java.net.Socket;
12
13 /**
14 * 1,指定端口,使用SeverSocket创建服务器
15 * 2,阻塞式等待连接accept()
16 * 3,操作:输入输出操作
17 * 4,释放资源
18 * @author 房廷飞
19 *
20 */
21 public class FileSever {
22 public static void main(String[] args) throws Exception {
23 System.out.println("------Server------");
24 //1,指定端口,使用SeverSocket创建服务duan
25 ServerSocket server = new ServerSocket(2555);
26 //* 2,阻塞式等待连接accept()
27 Socket client=server.accept();
28 System.out.println("一个客户端创建了连接!");
29 //* 3,操作:输入输出操作
30 InputStream in=new BufferedInputStream(client.getInputStream());
31 OutputStream out = new BufferedOutputStream(new FileOutputStream("C:\\Users\\user\\Desktop\\盲打拷贝.png"));
32 byte[] data=new byte[1024];
33 int len=-1;
34 while((len=in.read(data))!=-1) {
35 out.write(data,0,len);
36 out.flush();
37 }
38 //4,关闭资源
39 System.out.println("copy成功!");
40
41 out.close();
42 in.close();
43 server.close();
44 }
45 }
FileClient.java
1 package cn.ftf.tpc;
2
3 import java.io.BufferedInputStream;
4 import java.io.BufferedOutputStream;
5 import java.io.DataOutputStream;
6 import java.io.FileInputStream;
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.io.OutputStream;
10 import java.net.Socket;
11 import java.net.UnknownHostException;
12
13 /**
14 * 1,创建连接:使用Socket类创建客户端+服务的地址和端口
15 * 2,获取流,IO流操作
16 * 3,释放资源
17 * @author 房廷飞
18 *
19 */
20 public class FileClient {
21 public static void main(String[] args) throws Exception, IOException {
22 System.out.println("------Client------");
23 //1,创建连接:使用Socket类创建客户端+服务的地址和端口
24 Socket client=new Socket("localhost",2555);
25 //2,获取流,IO流操作
26 InputStream in=new BufferedInputStream(new FileInputStream("D:\\myjavacode\\JavaPractise01\\src\\cn\\ftf\\io\\盲打指示.jpg"));
27 OutputStream out = new BufferedOutputStream(client.getOutputStream());
28 byte[] data=new byte[1024];
29 int len=-1;
30 while((len=in.read(data))!=-1) {
31 out.write(data,0,len);
32 out.flush();
33 }
34 //3,释放资源
35 out.close();
36 in.close();
37 client.close();
38 }
39 }