java服务器端和C客户端基于socket通信IO阻塞问题

在Java服务器与C客户端通过socket进行文件传输时,遇到Java服务器端接收图片时IO阻塞的问题。文章介绍了问题背景并提供了两种解决办法:1) 客户端发送数据前先告知数据大小,服务器读取到指定大小后结束;2) 利用Java的Socket.setSoTimeout()设置超时,捕获SocketTimeoutException异常来结束读取。作者建议首选第一种方法,因为第二种方法可能频繁捕获异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做的项目中涉及到抓拍,算法是C 写的,Java写的应用层。用socket进行通信,C写的客户端,Java写服务器,传图片文件时,Java服务器,接受时,遇到IO 阻塞问题。java Server具体代码如下:

package finaly;


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;
import java.util.Timer;
import java.util.TimerTask;


/**
 * 
 */
public class MyServerSocket
{


public static void main(String[] args)
{


try
{
ServerSocket server = new ServerSocket(10086);
// server.setSoTimeout(10000);
while (true)
{
Socket s = server.accept();// 阻塞方法


// 只负责和客户端进行握手
new Thread(new UUploadThread(s)).start();
}
} catch (IOException e)
{
e.printStackTrace();
}
}
}


class UUploadThread implements Runnable
{
private Socket s;
int reallyGetSizeToKB = 0;
OutputStream out = null;


public UUploadThread(Socket s)
{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值