Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Android接收C服务器上的字节_Android_C_Sockets_Server_Serversocket - Fatal编程技术网

从Android接收C服务器上的字节

从Android接收C服务器上的字节,android,c,sockets,server,serversocket,Android,C,Sockets,Server,Serversocket,我已经成功地将我的android手机作为客户端连接到raspberry pi作为服务器 下一步是使用字节向raspberry pi发送数据。我用Java为Android做的正确吗 socket.getOutputStream().write(String.valueOf(progress).getBytes()); 此后,在我的raspberry pi端,我将不得不以C语言接收字节。我在服务器上接收数据时面临问题。这是我的密码 #include <stdio.h> #include

我已经成功地将我的android手机作为客户端连接到raspberry pi作为服务器

下一步是使用字节向raspberry pi发送数据。我用Java为Android做的正确吗

socket.getOutputStream().write(String.valueOf(progress).getBytes());
此后,在我的raspberry pi端,我将不得不以C语言接收字节。我在服务器上接收数据时面临问题。这是我的密码

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>

int main(){
  int welcomeSocket,clientSocket;
  char buffer[1024];
  struct sockaddr_in serverAddr;
  struct sockaddr_storage serverStorage;
  socklen_t addr_size;
  ssize_t nread;

  /*---- Create the socket. The three arguments are: ----*/
  /* 1) Internet domain 2) Stream socket 3) Default protocol (TCP in this case) */
  welcomeSocket = socket(PF_INET, SOCK_STREAM, 0);

  /*---- Configure settings of the server address struct ----*/
  /* Address family = Internet */
  serverAddr.sin_family = AF_INET;
  /* Set port number, using htons function to use proper byte order */
  serverAddr.sin_port = htons(9999);
  /* Set IP address to localhost */
  serverAddr.sin_addr.s_addr = INADDR_ANY;
  /* Set all bits of the padding field to 0 */
  memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero);  

  /*---- Bind the address struct to the socket ----*/
  bind(welcomeSocket, (struct sockaddr *) &serverAddr, sizeof(serverAddr));

  /*---- Listen on the socket, with 5 max connection requests queued ----*/
  if(listen(welcomeSocket,5)==0){
    printf("Listening\n");
}
  else
    printf("Error\n");

  /*---- Accept call creates a new socket for the incoming connection ----*/
  addr_size = sizeof serverStorage;
  clientSocket = accept(welcomeSocket, (struct sockaddr *) &serverStorage, &addr_size);
  printf("Successfully Connected!!!\n\r");

  //Receive data from android  
  //recv(welcomeSocket,buffer,1024,0);
  nread = recvfrom(clientSocket, buffer,1024, 0, (struct sockaddr *) &serverStorage, &addr_size);
  if(nread==-1)
  perror("Error!");
  else
  printf("Data received: %s",buffer);


return 0;

}
#包括
#包括
#包括
#包括
int main(){
int welcomeSocket、clientSocket;
字符缓冲区[1024];
serverAddr中的结构sockaddr\u;
结构sockaddr_存储服务器存储;
袜子尺寸;
ssize_t nread;
/*----创建套接字。三个参数是:----*/
/*1)Internet域2)流套接字3)默认协议(本例中为TCP)*/
welcomeSocket=套接字(PF_INET,SOCK_STREAM,0);
/*----配置服务器地址结构的设置----*/
/*地址家庭=互联网*/
serverAddr.sin_family=AF_INET;
/*设置端口号,使用htons函数使用正确的字节顺序*/
serverAddr.sinu port=htons(9999);
/*将IP地址设置为本地主机*/
serverAddr.sin\u addr.s\u addr=INADDR\u ANY;
/*将填充字段的所有位设置为0*/
memset(serverAddr.sin_zero,'\0',serverAddr.sin_zero的大小);
/*----将地址结构绑定到套接字----*/
绑定(welcomeSocket,(struct sockaddr*)&serverAddr,sizeof(serverAddr));
/*----在套接字上侦听,队列中最多有5个连接请求----*/
如果(监听(welcomeSocket,5)==0){
printf(“监听”);
}
其他的
printf(“错误\n”);
/*----Accept call为传入连接创建一个新套接字----*/
地址大小=服务器存储的大小;
clientSocket=accept(welcomeSocket,(struct sockaddr*)&serverStorage,&addr\u size);
printf(“已成功连接!!!\n\r”);
//从android接收数据
//recv(welcomeSocket,缓冲区,1024,0);
nread=recvfrom(clientSocket,buffer,1024,0,(struct sockaddr*)和serverStorage,以及addr\u size);
如果(nread==-1)
佩罗尔(“错误!”);
其他的
printf(“收到的数据:%s”,缓冲区);
返回0;
}

根据Pravin的评论,我尝试使用Recvfrom和perror,结果显示错误为-1。

好的!我意识到了问题所在。我意识到我没有使用以前创建的客户端套接字。我一直在使用服务器的套接字lol。一开始我没有注意到。我使用了一个示例来了解我的服务器和示例服务器之间的区别,这真的很有帮助


是的,您可以使用recv()接收字节。recv的返回值是多少?是“0”还是“-1”?您可以使用perror()或errno显示错误消息。对不起,如何显示recv的返回值?只要做一个返回recv(socket,buffer,BUFSIZ,0)?要获取返回值,可以在变量retVal=recv()中保存。参考和recv/recvfrom的例子参考中的例子。啊,我明白了,好的,谢谢。我明天会试试,让你知道结果!谢谢你,普拉文!我解决了这个问题。还有,我想问一下,我如何设置一个监听接收,如果我只在android上按send,那么我的pi上的接收就会运行?我应该做一会儿(1)循环?