我已经看到了很多与我试图做的事情有关的问题,但我还没有找到任何解决方案。
我尝试编写两个套接字程序(一个客户端和一个服务器),以便服务器能够向客户端发送任何类型的文件(按字节)。我不确定如何构建/协调以下内容:
>
(在服务器中)读取语句从文件中获取数据(我使用fread())
(在服务器中)将数据发送到客户端的write语句(我使用的是write())
(在客户端)读取语句从服务器接收数据(我使用read())
(在客户机中)将从服务器接收的数据写入文件的write语句(我使用的是fwrite())
我想以字节块的形式传输数据。无论文件有多大,服务器中的一个fread()语句和一个write()语句是否足够?(或者这取决于缓冲区的大小?)在客户端,一次read()调用和一次fwrite()调用就足够了吗?(或者这取决于缓冲区的大小?)
我对套接字编程还不熟悉。提前谢谢!我的服务器和客户端的以下部分:
客户端:
/*try to get file from server*/
char receive_buffer[256];
FILE * new_file;
int bytes_received = 0;
new_file = fopen("newfile.txt", "w");
bytes_received = read(conn_s, receive_buffer, 256);
printf("Received %d bytes\n", bytes_received);
while( bytes_received > 0)
{
bytes_received = read(conn_s, receive_buffer, 256);
printf("Received %d bytes\n", bytes_received);
fwrite(receive_buffer, 1, bytes_received, new_file);
printf("writing bytes!\n");
break;
}
if(bytes_received < 0)
{
printf("/nError reading bytes of data/n");
}
部分服务器代码:
FILE * file_to_get = fopen("sample.txt", "rb");
if(file_to_get == NULL)
{
printf("No such file!");
exit(0);
}
while(1)
{
unsigned char buff[256];
int num_read = fread(buff, 1, 256, file_to_get);
printf("read %d bytes\n", num_read);
if(num_read > 0)
{
write(conn_s, buff, num_read);
printf("writing %d bytes\n", num_read);
}
if(num_read < 256)
{
if(feof(file_to_get))
printf("End of file\n");
if(ferror(file_to_get))
printf("Error reading bytes\n");
break;
}
}
当发送到网络时,您可以使用一个单独的调用来写()。如果内核中没有足够的缓冲空间来处理整个事情,写()
将阻塞,直到它能够处理所有的事情。你也可以把它写成块,这也很好。这真的不重要。
从网络读取数据时,必须在循环中调用read()
。调用read()
时指定的缓冲区大小只是允许返回的最大值,它不会等待收到那么多。因此,它可以(而且经常)得到比这更少的回报。只需继续调用read()
,直到它返回0
以指示EOF,并将每个缓冲区写入文件。
我使用一个具有双向通信的套接字设置了一个客户端-服务器模型。 应该是这样的:1。客户端-发送单词数组2。服务器-读取单词数组3。服务器-发送布尔值4。客户端-读取布尔值5。客户端-发送图像6。服务器读取图像 这个过程在一个循环中,与第一次迭代完美配合,但在第二次迭代中,我得到了以下错误: JAVA网SocketException:软件导致的连接中止:套接字写入错误 我认为发生的是,当服务器返回到读
我试图用java实现一个客户端服务器,在这里我读取客户端中的输入并在服务器中执行UperCase,然后返回客户端并打印UperCase。我使用ObjectOutputStream和ObjectInputStream进行读写,但是当我在客户机中键入一个msg时,程序会显示以下错误: Digite uma msg casa java.io.eofexception位于java.io.datainput
我有两个通过字符串与套接字通信的Java项目。一个是客户端,另一个是服务器。服务器通过“ServerSocket”接受连接,并使用新创建的“套接字”创建新的“会话”(线程)。 同时,客户端只有一个“套接字”,一旦连接了这个套接字,客户端就会创建一个“ClientSession”(线程,非常类似于“session”)。 我想要的是服务器通过“username”字符串询问客户机他的用户名,客户机用他的
我是 python 和套接字的新手,正在尝试编写一个回显客户端/服务器套接字。我已经编写了服务器,以便丢失 30% 的数据包。我将客户端编程为在一秒后超时,因为数据包可能会丢失。但是,每当我运行客户端套接字时,我的输出都是 100% 请求超时。我假设我得到这个输出,因为我的服务器从未收到过消息。我已经多次查看了我的代码,但无法弄清楚为什么我不断获得此输出。下面是我的服务器和客户端套接字的代码。任何
Java: 在C#中-它停止在“receiver=listener.accept();”在java(android)中-它停止于“sender_socket=new Socket(serverAddr,SERVERPORT);”这应该是java套接字函数的问题--需要另一个函数连接到C#-server。
首先我要感谢你花时间... 我在macbook中用C++创建了一个服务器套接字,在运行windows XP的不同机器中用Java创建了一个客户机/套接字。我已将端口指定为5000,但无法指定正确的主机,因此无法进行连接。当我在windows xp中使用WinSock2创建一个C++服务器/套接字时,当我使用本地主机时,连接是完美的...有什么想法吗??? 提前Thnx int main(int a