通过Socket实现TCP编程
2016-08-02 15:29
417 查看
基于Tcp的Socket通信原理
Java socket通信通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过”套接字”向网络发出请求或者应答网络请求。socket 开发分客户端与服务端,服务端ServerSocket开启服务监听某一端口,客户端socket向此服务器的这个端口发出请求,成功则会建立会话,形成通道,这个通道若不做其它操作会一直存在,就是所谓的长连接了,这时服务端与客户端可以通过此通道进行即时通信.
通信模型:
服务器端的实现:
客户端的实现
应用多线程来实现服务器与多线程之间的通信
步骤如下:
1、服务器端创建ServerSocket,循环调用accept()等待客户端链接
2、客户端创建一个Socket并请求和服务器端链接
3、服务器端接受客户端请求,创建socekt与该客户端建立专线链接
4、建立链接的socket在一个单独的线程上对话
5、服务器继续等待新的链接
服务器端多线程的实现
服务器端的实现
客户端的实现
与上述无异
Java socket通信通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过”套接字”向网络发出请求或者应答网络请求。socket 开发分客户端与服务端,服务端ServerSocket开启服务监听某一端口,客户端socket向此服务器的这个端口发出请求,成功则会建立会话,形成通道,这个通道若不做其它操作会一直存在,就是所谓的长连接了,这时服务端与客户端可以通过此通道进行即时通信.
通信模型:
服务器端的实现:
package Socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /* * * 服务器端 * 基于TCP协议的Socket通信 * * */ public class Server { public static void main(String[] args) throws IOException { // 1.创建ServerSocket对象,绑定监听端口,并监听此端口 ServerSocket serverSocket = new ServerSocket(8880); // 2.通过accept方法监听客户端请求,等待客户端的连接 Socket socket = socket = serverSocket.accept(); //3.连接建立后,通过输入流读取客户端发送的请求信息 InputStream is = socket.getInputStream();//字节输入流 InputStreamReader isr = new InputStreamReader(is);//转为字符流 BufferedReader br = new BufferedReader(isr);//添加缓冲 String info = null; while((info = br.readLine())!= null) { System.out.println("服务器端收到的客户端传来的请求内容为:"+info); } //4.通过输出流向客户端发出响应信息 OutputStream os = socket.getOutputStream(); PrintWriter print = new PrintWriter(os); print.write("欢迎您!"); print.flush(); socket.shutdownOutput(); // 5.关闭相关资源 serverSocket.close(); } }
客户端的实现
package Socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; /* * * 客户端 * 基于TCP协议的Socket通信 * * */ class Client { public static void main(String[] args) throws UnknownHostException, IOException { // 1.创建Socket对象,指明要连接的服务器地址和端口号 Socket socket = new Socket("localhost", 8888); // 2.连接建立后,通过输出流向服务器端发送请求 OutputStream os = socket.getOutputStream();// 字节输出流 PrintWriter print = new PrintWriter(os); // 将字节输出流包装为打印输出流 print.write("用户名:admin; 密码:123"); print.flush(); socket.shutdownOutput(); // 3.通过输入流读取服务器端响应的信息 InputStream is = socket.getInputStream();// 字节输入流 InputStreamReader isr = new InputStreamReader(is);// 转为字符流 BufferedReader br = new BufferedReader(isr);// 添加缓冲 String info = null; while ((info = br.readLine()) != null) { System.out.println("客户端收到的服务器端传来的响应内容为:" + info); } // 4.关闭相关资源 socket.close(); } }
应用多线程来实现服务器与多线程之间的通信
步骤如下:
1、服务器端创建ServerSocket,循环调用accept()等待客户端链接
2、客户端创建一个Socket并请求和服务器端链接
3、服务器端接受客户端请求,创建socekt与该客户端建立专线链接
4、建立链接的socket在一个单独的线程上对话
5、服务器继续等待新的链接
服务器端多线程的实现
package Socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; public class ServerThread extends Thread { Socket socket = null; ServerThread(Socket socket ) { this.socket = socket; } public void run(){ //3.连接建立后,通过输入流读取客户端发送的请求信息 try { InputStream is = socket.getInputStream();//字节输入流 InputStreamReader isr = new InputStreamReader(is);//转为字符流 BufferedReader br = new BufferedReader(isr);//添加缓冲 String info = null; while((info = br.readLine())!= null) { System.out.println("服务器端收到的客户端传来的请求内容为:"+info); } //4.通过输出流向客户端发出响应信息 OutputStream os = socket.getOutputStream(); PrintWriter print = new PrintWriter(os); print.write("欢迎您!"); print.flush(); socket.shutdownOutput(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
服务器端的实现
package Socket; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; /* * * 服务器端 * 基于TCP协议的Socket通信 * * */ public class Server { public static void main(String[] args) throws IOException { // 1.创建ServerSocket对象,绑定监听端口,并监听此端口 ServerSocket serverSocket = new ServerSocket(8880); // 2.通过accept方法监听客户端请求,等待客户端的连接 Socket socket = null; int count = 0; while (true) { socket = serverSocket.accept(); Thread thread = new ServerThread(socket); thread.start(); count++; System.out.println("客户端的数量为:"+count); } // 5.关闭相关资源 //serverSocket.close(); } }
客户端的实现
与上述无异
package Socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; /* * * 客户端 * 基于TCP协议的Socket通信 * * */ class Client { public static void main(String[] args) throws UnknownHostException, IOException { // 1.创建Socket对象,指明要连接的服务器地址和端口号 Socket socket = new Socket("localhost", 8888); // 2.连接建立后,通过输出流向服务器端发送请求 OutputStream os = socket.getOutputStream();// 字节输出流 PrintWriter print = new PrintWriter(os); // 将字节输出流包装为打印输出流 print.write("用户名:admin; 密码:123"); print.flush(); socket.shutdownOutput(); // 3.通过输入流读取服务器端响应的信息 InputStream is = socket.getInputStream();// 字节输入流 InputStreamReader isr = new InputStreamReader(is);// 转为字符流 BufferedReader br = new BufferedReader(isr);// 添加缓冲 String info = null; while ((info = br.readLine()) != null) { System.out.println("客户端收到的服务器端传来的响应内容为:" + info); } // 4.关闭相关资源 socket.close(); } }
相关文章推荐
- java网络编程,通过TCP,Socket实现多对一的局域网聊天室
- java网络编程,通过TCP,Socket实现多对一的局域网聊天室
- Java网络编程,通过TCP,Socket实现多对一的局域网聊天室
- 通过Socket实现TCP编程
- java网络编程,通过TCP,Socket实现多对一的局域网聊天室 .
- [置顶] 使用多线程实现多客户端的连接(通过Socket实现TCP编程)
- 通过Socket实现TCP编程
- JAVA 通过 Socket 实现 TCP 编程
- 通过 Socket 实现 TCP 编程入门
- Java的Socket通信----通过 Socket 实现 TCP 编程之多线程demo(2)
- JAVA 通过 Socket 实现 TCP 编程
- java网络编程,通过TCP,Socket实现多对一的局域网聊天室
- JAVA 通过 Socket 实现 TCP 编程
- JAVA 通过 Socket 实现 TCP 编程
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)----使用方法
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)----使用方法
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- VC++中Socket编程的实现---【TCP客户端】
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分