Socket Server 发送消息机制


  
Server端
public static void main(String[] a    rgs) {

    try {

        System.out.println("*******这是服务器端*******");
        //1.创建服务端socket对象    端口号1024以上
        ServerSocket serverSocket = new ServerSocket(8777);

        //2.接受客户端对象
        Socket so = serverSocket.accept();


        //3.进行通信--java io 流进行通信
        InputStream inputStream = so.getInputStream();//得到输入流
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        //读取客户端发来的消息
        String s  = reader.readLine();

        System.out.println("来自客户端的消息是:"+s);
        //发送给客户消息
        OutputStream outputStream = so.getOutputStream();
        outputStream.write("儿子你好 我是服务器\r\n".getBytes());
        outputStream.flush();
        //4.关闭通信
        inputStream.close();
    } catch ( Exception e) {
        e.printStackTrace();
    }
}
 

客户端


public static void main(String[] args) {
    try {
        System.out.println("*******这是客户端*********");
        Socket socket = new Socket("169.254.105.114", 8777);
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("你好,我是你爸爸!\r\n".getBytes());

        outputStream.flush();

        InputStream inputStream = socket.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String s = reader.readLine();
        System.out.println("这是服务端发过来的消息"+s);

        outputStream.close();
    } catch ( Exception e) {
        e.printStackTrace();
    }
}
UTF-8  代码 写在build.gradle

tasks.withType(JavaCompile){
    options.encoding = "UTF-8"
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在使用C语言的Socket进行发送消息时,可以采用分片发送的方式。具体步骤如下: 1. 首先,将要发送的长消息进行分片,将消息内容切割成较小的数据块。这样可以保证每个数据块的长度在可接受的范围内,避免一次发送数据量过大。 2. 使用Socket的send函数进行数据发送。对于每个数据块,使用循环逐个发送。可以设置一个适当的缓冲区来存放每次发送的数据块。 3. 在接收端,需要使用与发送端相对应的接收函数(如recv),循环接收并合并每个数据块,直到接收到完整的长消息。 需要注意的是,发送消息可能会由于网络环境的原因导致分片后的数据块不按发送顺序到达。因此,在接收端需要根据发送时的分片顺序对接收到的数据块进行排序和组装,以还原出完整的长消息。 另外,还需要考虑消息传输的稳定性和可靠性。可以结合TCP协议的特性使用可靠的连接,保证数据的传输不会出现丢失或错误。在发送和接收时,可以根据需要设置超时时间等处理机制,以确保长消息的成功传输。 总之,通过将长消息分片发送,并在接收端进行排序和组装,可以有效解决C语言Socket发送消息的问题。同时,合理设置相关参数和处理机制,可以提高消息传输的稳定性和可靠性。 ### 回答2: 在使用C语言 socket 发送消息时,需要对消息进行分片处理和循环发送。 首先,我们需要确定消息的长度,并将其分割为较小的片段。可以根据自己的需求或协议来决定每个片段的大小。然后,我们可以使用循环来逐个发送这些片段。 接下来,我们需要创建一个 socket 连接,并使用该连接来发送消息。可以使用 socket 函数来创建 socket 连接,并使用 connect 函数将其连接到目标服务器。 在发送消息之前,我们需要使用 send 函数来发送消息的长度信息。这是为了让接收方知道消息的总长度,并为接收做好准备。可以使用 htonl 函数将消息长度从主机字节序转换为网络字节序,并使用 send 函数发送。 然后,我们可以使用 send 函数来发送分片后的消息片段。循环发送每个片段,并使用指针来逐个发送。可以使用 send 函数返回的实际发送字节数和循环发送的字节数,以确保所有的字节都被正确发送。 在接收方,需要使用 recv 函数来接收消息的长度信息,并进行反序列化处理。接收方可以使用循环接收来接收每个片段,并使用指针逐个接收。可以使用 recv 函数返回的实际接收字节数和循环接收的字节数,以确保所有的字节都被正确接收。 最后,需要关闭 socket 连接,使用 close 函数来关闭连接。 使用上述步骤,我们可以通过循环发送和接收来发送消息,并确保消息的完整性和正确性。这样,我们可以在C语言中使用 socket 发送消息。 ### 回答3: 在c语言中,使用socket发送消息可以通过分段发送来实现。首先,将长消息分成较小的片段,每个片段的长度可以根据自己的需要设定。然后,使用循环发送这些片段。发送时,可以使用send函数来发送数据。 发送片段的步骤如下: 1. 创建socket:使用socket函数创建一个socket,可以选择TCP或UDP协议。 2. 连接服务器:如果需要与服务器进行通信,则需要使用connect函数来建立连接。 3. 分段发送:将长消息分成较小的片段,每个片段的长度可以根据需求自定义。使用send函数来发送每个片段,直到全部消息都被发送完成。 4. 关闭socket:在所有消息发送完毕后,需要使用close函数来关闭socket连接。 以下是一个简单的示例代码演示如何发送消息: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define MAX_BUFFER_SIZE 1024 int main() { int clientSocket; struct sockaddr_in serverAddress; char message[] = "This is a long message that needs to be sent in segments."; char buffer[MAX_BUFFER_SIZE]; int messageLength = strlen(message); int segmentSize = 10; int sentBytes = 0; int remainingBytes = messageLength; int currentSentBytes; // 创建socket clientSocket = socket(AF_INET, SOCK_STREAM, 0); if (clientSocket < 0) { perror("Socket creation error"); return 1; } // 设置服务器地址和端口 serverAddress.sin_family = AF_INET; serverAddress.sin_port = htons(12345); serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1"); // 连接服务器 if (connect(clientSocket, (struct sockaddr *)&serverAddress, sizeof(serverAddress)) < 0) { perror("Connection error"); return 1; } // 发送消息片段 while (remainingBytes > 0) { currentSentBytes = send(clientSocket, message + sentBytes, segmentSize, 0); if (currentSentBytes < 0) { perror("Send error"); return 1; } sentBytes += currentSentBytes; remainingBytes -= currentSentBytes; } // 关闭socket close(clientSocket); return 0; } ``` 在这个示例中,我们创建了一个TCP socket,连接到本地主机的12345端口,并将长消息分成每个片段大小为10。然后循环发送这些片段,直到所有的片段都被发送完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值