TCP 协议 的 C/S程序
1.ServerSocket 搭建服务器
2.Socket 搭建客户端
两方使用socket(套接字 , 通信端点) 进行交流
ServerSocket
用于创建服务器 ,创建完毕后, 会绑定一个端口号,然后此服务器可以等待客户端连接 ,每连接一个客户端 , 服务器就会得到一个新的Socket对象, 用于跟客户端进行通信
//构造方法ServerSocket(int port); ****创建一个基于TCP/IP协议的服务器 , 并绑定指定的端口号.注意: 参数port的范围是: 0-65535 (建议1025-65535)//常用方法:Socket accept(); ****等待客户端连接 .此方法会导致线程的阻塞!直到一个新的客户端连接成功, return Socket对象后, 线程在继续执行.void close();释放占用的端口号 , 关闭服务器.
Socket
是两台计算机之间通信的端点 , 是网络驱动提供给应用程序编程的一种接口 一套标准, 一种机制 .
构造方法:Socket(String ip,int port) ****创建一个套接字, 并连接指定ip和端口号的 服务器.参数1. 服务器的ip地址参数2. 服务器软件的端口号..常用方法:- OutputStream getOutputStream();返回的是 , 指向通信的另一端点的输出流- InputStream getInputStream();返回的是 , 指向通信的另一端点的输入流- void close();关闭套接字注意:在网络编程时, 获取输入输出流的操作 ,对于客户端与服务器来说是相对的客户端的输入流, 输入的是服务器的输出流 输出的内容.客户端的输出流, 输出到了服务器的输入流中.所以 在使用时, 需要注意以下一点规则:客户端与服务器获取流的顺序必须是相反的:例如:客户端先得到了输入流 , 那服务器必须先获取输出流
举例:
package com.zmh.net;import java.io.*;import java.net.ServerSocket;import java.net.Socket;public class Demo {//服务器public static void main(String[] args) throws IOException {ServerSocket server = new ServerSocket(55621);System.out.println("服务器启动完毕,等待连接");//等待客户端连接Socket socket = server.accept();System.out.println("一个客户端连接了");//获取一个输出流OutputStream os = socket.getOutputStream();//转换成打印流PrintStream ps = new PrintStream(os);ps.println("欢迎连接到服务器");InputStream is = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));System.out.println("我收到你的恢复了!!\n"+br.readLine());System.out.println("服务器进程结束");}}package com.zmh.net;import java.io.*;import java.net.Socket;public class ClientDemo {public static void main(String[] args) throws IOException {Socket socket = new Socket("127.0.0.1", 55621);InputStream is = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));System.out.println("客户端收到消息:"+br.readLine());OutputStream os = socket.getOutputStream();PrintStream ps = new PrintStream(os);ps.println("我看看你干嘛呢");}}
