package TCP;
/**
* TCP编程
* 需求:完成网络登录功能;
* 用户输入用户名密码,服务器给出登录成功或失败的提示
*
* 分析
* 使用基于TCP协议的Socket网络编程实现
* TCP协议基于请求-响应模式
* 在网络通讯中,第一次主动发起通信的程序被称作客户端(Client)程序
* 第一次通讯中等待连接的程序被称作服务器端(Server)程序
* 利用IO流实现数据的传输
*
* 客户端 输出流-->输入流 服务端 OutputStream --> InputStraem
* 客户端 输入流<--输出流 服务端 InputStream <-- OutputStream
*
* 详细步骤(通讯原理)
* 服务器创建ServerSocket,在指定端口监听并处理请求
* 客户端创建Socket,向服务器发送请求
*
* 服务器端 客户端
* 1.创建ServerSocket(int port)对象 1.创建Socke(String host,int port)对象
* 2.在Socket上监听客户端的连接请求
* 3.阻塞,等待连接的建立 <-----> 2.向服务器发送[连接]请求
* 4.接收并处理请求信息 <-----> 3.向服务器发送[服务]请求
* 5.将处理结果返回给客户端 <-----> 4.接收服务结果
* 6.关闭流和Socke对象 5.关闭流和Socket对象
*
* @author pmc
*
*/
public class TCPTest {
}
ServerSocket服务端流程
package TCP;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* TCP流程 创建服务器
* 1.指定端口使用ServerSocket创建服务器
* 2.阻塞式等待连接accept
* 3.操作:输入输出流操作
* 4.释放资源
*
* @author pmc
*
*/
public class ServerTest {
public static void main(String[] args) throws IOException {
// 1.指定端口只用ServerSocket创建服务器
ServerSocket server=new ServerSocket(8888);
// 2.阻塞式等待连接accept/浏览器访问localhost:8888
Socket client=server.accept();
System.out.println("-----Server-----");
// 3.操作:输入输出流操作
DataInputStream in=new DataInputStream(client.getInputStream());
String data=in.readUTF();
System.out.println(data);
// 4.释放资源
in.close();
client.close();
//关闭服务器
server.close();
}
}
Socket客户端流程
package TCP;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
/**
* TCP流程 创建客户端
* 1.建立连接:使用Socket创建客户端+服务器地址+端口
* 2.操作:输入输出流操作
* 3.释放资源
*
* @author pmc
*
*/
public class ClientTest {
public static void main(String[] args) throws IOException, IOException{
System.out.println("-----Client-----");
// 1.建立连接:使用Socket创建客户端+服务器地址+端口
Socket client=new Socket("localhost",8888);
// 2.操作:输入输出流操作
DataOutputStream out=new DataOutputStream( client.getOutputStream());
String data="hello";
out.writeUTF(data);
out.flush();
// 3.释放资源
out.close();
client.close();
}
}