JAVA Socket编程(二)之TCP通信

简介: 基于TCP(面向连接)的socket编程,分为客户端和服务器端。 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send/recv) (4)关闭套接字 服务器端的流程如下: (1)创建套接字(socket)...

基于TCP(面向连接)的socket编程,分为客户端和服务器端。

客户端的流程如下:

(1)创建套接字(socket)

(2)向服务器发出连接请求(connect)

(3)和服务器端进行通信(send/recv)

(4)关闭套接字

服务器端的流程如下:

(1)创建套接字(socket)

(2)将套接字绑定到一个本地地址和端口上(bind)

(3)将套接字设为监听模式,准备接收客户端请求(listen)

(4)等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)

(5)用返回的套接字和客户端进行通信(send/recv)

(6)返回,等待另一个客户请求。

(7)关闭套接字。

 

本文介绍一个多线程的TCP编程

1:创建服务器端并实现线程类  代码如下

 

 1 package tcp;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.InputStreamReader;
 5 import java.io.PrintWriter;
 6 import java.net.Socket;
 7 
 8 public class Server implements Runnable {//实现一个线程类
 9 private Socket soc;
10     public Server(Socket soc) {
11     super();
12     this.soc = soc;
13 }
14     private BufferedReader in=null;
15     private BufferedReader input=null;//获得各种流对象
16     PrintWriter out=null;
17     @Override
18     public void run() {
19         // TODO Auto-generated method stub
20         try {
21             in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
22             input=new BufferedReader(new InputStreamReader(System.in));
23             out=new PrintWriter(soc.getOutputStream(),true);//每次都清空输出流
24             String message;
25             while((message=in.readLine())!=null){
26                 System.out.println(message);//读取到的客户端数据
27                 System.out.println("输入回执的数据:");
28                 out.println(input.readLine());//回执数据
29             }
30         } catch (Exception e) {
31             // TODO: handle exception
32             e.printStackTrace();
33         }finally{
34             try {
35                 in.close();
36                 input.close();//关闭各种流对象
37                 out.close();
38             } catch (Exception e2) {
39                 e2.printStackTrace();
40                 // TODO: handle exception
41             }
42         }
43     }
44 
45 }

 

2:创建多线程的启动类   代码如下

 1 package tcp;
 2 
 3 import java.net.ServerSocket;
 4 import java.net.Socket;
 5 
 6 public class ServerStart {
 7 
 8     public static void main(String[] args) {
 9         // TODO Auto-generated method stub
10         try {
11             ServerSocket server=new ServerSocket(9000);//这只9000为服务器段
12             Socket soc=new Socket();
13             while (true) {
14                 soc=server.accept();//监听端口的链接
15                 new Thread(new Server(soc)).start();//只要有链接就启动一个线程
16             }
17         } catch (Exception e) {
18             // TODO: handle exception
19             e.printStackTrace();
20         }
21     }
22 
23 }

3:创建客户端的类  代码如下

 1 package tcp;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.InputStreamReader;
 5 import java.io.PrintWriter;
 6 import java.net.Socket;
 7 
 8 public class Client {
 9     private static Socket soc=null;
10     private static BufferedReader in=null;
11     private static BufferedReader input=null;
12     private static PrintWriter out=null;
13     
14     public static void main(String[] args) {
15         // TODO Auto-generated method stub
16         try {
17             soc=new Socket("127.0.0.1",9000);
18             while(true){
19             in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
20             input=new BufferedReader(new InputStreamReader(System.in));
21             out=new PrintWriter(soc.getOutputStream(),true);
22             System.out.println("输入发送的数据:");
23             String op=input.readLine();
24             out.println(op);
25             if(op.equals("aa")){
26                 break;
27             }
28                 System.out.println(in.readLine());
29             }
30         } catch (Exception e) {
31             // TODO: handle exception
32             e.printStackTrace();
33         }finally{
34             try {
35                 in.close();
36                 input.close();
37                 out.close();
38             } catch (Exception e2) {
39                 // TODO: handle exception
40                 e2.printStackTrace();
41             }
42         }
43     }
44 
45 }

 udp查看:http://www.cnblogs.com/GH0522/p/8119289.html

欢迎大家一起说出自己的想法。
目录
相关文章
|
3月前
|
网络协议 安全 API
WebSocket、Socket、TCP 和 HTTP 的差别与应用场景
WebSocket、Socket、TCP 和 HTTP 是网络通信中的四大“使者”,各具特色:HTTP 适合短时请求,TCP 稳定可靠,Socket 灵活定制,WebSocket 实现实时双向通信。本文用通俗语言解析它们的区别与应用场景,助你为项目选择最合适的通信方式。
1180 3
|
网络协议 安全 网络安全
网络编程:基于socket的TCP/IP通信。
网络编程:基于socket的TCP/IP通信。
|
9月前
|
Java 物联网 定位技术
Java socket获取gps定位
通过Java Socket编程获取GPS定位信息可以实现实时的地理位置跟踪。本文介绍了如何搭建Socket服务器、解析GPS数据以及实现客户端发送GPS数据的流程。希望这篇文章能为开发者提供清晰的指导,帮助构建高效的GPS定位系统。
188 7
|
12月前
|
存储 消息中间件 安全
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
【10月更文挑战第9天】本文介绍了如何利用JUC组件实现Java服务与硬件通过MQTT的同步通信(RRPC)。通过模拟MQTT通信流程,使用`LinkedBlockingQueue`作为消息队列,详细讲解了消息发送、接收及响应的同步处理机制,包括任务超时处理和内存泄漏的预防措施。文中还提供了具体的类设计和方法实现,帮助理解同步通信的内部工作原理。
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
|
12月前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
152 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
11月前
|
Java
JAVA多线程通信:为何wait()与notify()如此重要?
在Java多线程编程中,`wait()` 和 `notify()/notifyAll()` 方法是实现线程间通信的核心机制。它们通过基于锁的方式,使线程在条件不满足时进入休眠状态,并在条件满足时被唤醒,从而确保数据一致性和同步。相比其他通信方式,如忙等待,这些方法更高效灵活。 示例代码展示了如何在生产者-消费者模型中使用这些方法实现线程间的协调和同步。
110 3
|
12月前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
150 1
|
12月前
|
安全 Java 开发者
Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用
本文深入解析了Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用。通过示例代码展示了如何正确使用这些方法,并分享了最佳实践,帮助开发者避免常见陷阱,提高多线程程序的稳定性和效率。
214 1
|
12月前
|
Java
在Java多线程编程中,`wait()` 和 `notify()/notifyAll()` 方法是线程间通信的核心机制。
在Java多线程编程中,`wait()` 和 `notify()/notifyAll()` 方法是线程间通信的核心机制。它们通过基于锁的方式,使线程在条件不满足时进入休眠状态,并在条件成立时被唤醒,从而有效解决数据一致性和同步问题。本文通过对比其他通信机制,展示了 `wait()` 和 `notify()` 的优势,并通过生产者-消费者模型的示例代码,详细说明了其使用方法和重要性。
143 1
|
12月前
|
网络协议 安全 Java
Java Socket原理
Java Socket原理是指在Java中通过Socket实现的网络通信的基础理论与机制。Socket是网络中不同设备间通信的一种标准方式,它允许应用程序之间通过TCP/IP等协议进行数据交换。在Java中,利用Socket编程可以方便地创建客户端与服务器端应用,实现跨网络的数据传输功能,是互联网软件开发中的重要技术之一。它支持多种通信模式,如可靠的流式套接字(TCP)和数据报式套接字(UDP)。
196 10

热门文章

最新文章