使用socket建立长连接

服务端代码:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
 
public class MyServerBin {
 
    public static void main(String[] args) {
        MyServerBin myServerBin=new MyServerBin();
        myServerBin.startAction();
    }
    
    public void startAction(){
        ServerSocket serverSocket=null;
        try {
            serverSocket=new ServerSocket(1234);
            while(true){
                Socket socket=serverSocket.accept();
                new Thread(new MyRuns(socket)).start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (serverSocket!=null) {
                    serverSocket.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }
    
    class MyRuns implements Runnable{
        
        Socket socket;
        BufferedReader reader;
        BufferedWriter writer;
 
        public MyRuns(Socket socket) {
            super();
            this.socket = socket;
        }
 
        @Override
        public void run() {
            try {
                reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                String lineString="";
                while( !(lineString=reader.readLine()).equals("bye") ){
                    System.out.println("客户端:"+socket.hashCode()+"==="+lineString);
                    writer.write("服务器返回:"+lineString+"\n");
                    writer.flush();
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (reader!=null) {
                        reader.close();
                    }
                    if (writer!=null) {
                        writer.close();
                    }
                    if (socket!=null) {
                        socket.close();
                    }
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
        }
        
    }
    
}

客户端代码:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
 
public class MyClickBin {
 
    public static void main(String[] args) {
        MyClickBin myClickBin=new MyClickBin();
        myClickBin.startAction();
    }
    
    void readSocketInfo(BufferedReader reader){
        new Thread(new MyRuns(reader)).start();
    }
    
    class MyRuns implements Runnable{
        
        BufferedReader reader;
        
        public MyRuns(BufferedReader reader) {
            super();
            this.reader = reader;
        }
 
        @Override
        public void run() {
            try {
                String lineString="";
                while( (lineString = reader.readLine())!=null ){
                    System.out.println(lineString);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
    }
    
    public void startAction(){
        Socket socket=null;
        BufferedReader reader=null;
        BufferedWriter writer=null;
        BufferedReader reader2=null;
        try {
            socket=new Socket("127.0.0.1", 1234);
            reader = new BufferedReader(new InputStreamReader(System.in));
            reader2=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            readSocketInfo(reader2);
            String lineString="";
            while(!(lineString=reader.readLine()).equals("exit")){
                writer.write(lineString+"\n");
                writer.flush();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (reader!=null) {
                    reader.close();
                }
                if (writer!=null) {
                    writer.close();
                }
                if (socket!=null) {
                    socket.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在STM32F4系列微控制器上使用Socket库来建立UDP(User Datagram Protocol)连接非常简单和方便。以下是一个简单的步骤说明: 1. 首先,我们需要在工程中添加相应的库文件,在使用Socket库之前,请确保已经添加了一个网络库,例如LwIP(Lightweight IP)库。 2. 接下来,我们需要创建一个UDP套接字,使用Socket库的`socket()`函数来实现。该函数返回一个套接字描述符,可用于之后的操作。 3. 设置套接字的属性,包括IP地址和端口号。这些属性将用于建立网络连接和通信。 4. 使用`bind()`函数将套接字与本地IP地址和端口号绑定。 5. 可选地,可以使用`setsockopt()`函数设置套接字选项,例如超时时间等。 6. 使用`sendto()`函数向特定的远程IP地址和端口发送数据。 7. 使用`recvfrom()`函数从特定的远程IP地址和端口接收数据。 8. 最后,使用`closesocket()`函数关闭套接字。 需要注意的是,STM32F4系列微控制器上的Socket库可能有特定的函数命名和参数,具体的使用方式可以参考相关的文档和示例代码。此外,在使用Socket库之前,还需配置正确的网络设置,确保硬件能够正确连接到网络。 总之,使用Socket库在STM32F4系列微控制器上建立UDP连接是非常简单和快速的,只需几个简单的函数调用即可完成手动建立和管理UDP连接。这样,我们可以在STM32F4上实现可靠的网络通信,以实现各种应用场景,如传感器数据采集和远程监控等。 ### 回答2: 使用STM32F4建立UDP连接可以通过以下步骤实现: 1. 配置网络参数:根据需要配置STM32F4板上的网络参数,包括IP地址、子网掩码、网关等。 2. 初始化通信模块:使用HAL库中的函数,例如`HAL_ETH_Init()`或`HAL_ETH_MspInit()`,来初始化以太网模块,确保模块能够正常工作。 3. 创建UDP套接字:使用`socket()`函数创建UDP套接字,并指定协议参数和端口号。例如,`socket(AF_INET, SOCK_DGRAM, 0);` 4. 绑定本地端口:使用`bind()`函数将UDP套接字与本地端口绑定。例如,`bind(sock, (struct sockaddr*)&local_addr, sizeof(local_addr));` 5. 设置远程IP地址和端口:使用`connect()`函数设置远程IP地址和端口,所有通过套接字发送的数据将会发送到这个远程地址。例如,`connect(sock, (struct sockaddr*)&remote_addr, sizeof(remote_addr));` 6. 发送数据:使用`sendto()`函数发送数据。例如,`sendto(sock, send_buf, send_buf_len, 0, (struct sockaddr*)&remote_addr, sizeof(remote_addr));` 7. 接收数据:使用`recvfrom()`函数接收数据,并指定存储接收数据的缓冲区和最大接收字节数。例如,`recvfrom(sock, recv_buf, MAX_RECV_BUF_SIZE, 0, (struct sockaddr*)&remote_addr, &addr_len);` 8. 关闭套接字:使用`close()`函数关闭套接字。例如,`close(sock);` 通过以上步骤,可以在STM32F4上建立一个UDP连接并实现数据的发送和接收。需要根据实际情况进行相应的参数配置,确保网络设置正确以及套接字的正常运行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值