楚香饭 发表于 2015-8-11 12:58:38

我觉得最好不要用字符串发送。都是数据,用二进制多好。
干嘛要转换成字符串,然后接收以后再转换回来呢?多此一举不是。

对于后面有二进制的数据,你可以直接用 fortran read 。
也可以控制 matlab,发送完字符串以后,接着发送一系列的 \0 或空格。都可以

YHWHIT 发表于 2015-8-11 19:49:56

楚香饭 发表于 2015-8-11 12:58
我觉得最好不要用字符串发送。都是数据,用二进制多好。
干嘛要转换成字符串,然后接收以后再转换回来呢? ...

嗯哪谢谢
对二进制不太了解,我先用字符串做做。

YHWHIT 发表于 2015-8-13 17:07:03

楚香饭 发表于 2015-8-11 12:58
我觉得最好不要用字符串发送。都是数据,用二进制多好。
干嘛要转换成字符串,然后接收以后再转换回来呢? ...

代码如下:
      ! 接收数据
      ireceivelen=recv(isender,ClientServerMessage%buffer,500,0)
         if(ireceivelen<0)then
          write(*,*)"连接失败"
          stop
         else
             dpred=ClientServerMessage%buffer
             write(*,*)"sever say:"
             write(*,*) dpred
             write(*,*) ClientServerMessage%buffer
         end if
      
      
      ! 发送数据
      write(*,*)"please enter message:"
      ClientServerMessage%bufferout=rfoutput
      isendlen=send(isender,ClientServerMessage%bufferout,500,0)
      write(*,*) ClientServerMessage%bufferout
      if(isendlen<0)then
          write(*,*)"连接失败"
      end if为什么先发送数据,后接收不好使?先发送那面收不到
如果改为先接收(后面不变),再发送,再接收却又好使,那面也能收到。

fcode 发表于 2015-8-13 17:18:42

winsock 的发送接收,有 TCP 和 UPD 两种。
其中 UDP 是没有反馈信息的,发送方只管发送,不知道接收方是否接收到。
而这又分为阻塞和非阻塞两种。
如果你使用的是非阻塞方式,那可能需要循环一段时间,来判断是否接收到。
即:
发送方发送后,循环等待回应。
接收方循环接收,直到收到,发送回应。

如果你需要一边发送,一边接收(而且两者还有关联)。那么 TCP 其实更适合你。

YHWHIT 发表于 2015-8-14 09:15:05

fcode 发表于 2015-8-13 17:18
winsock 的发送接收,有 TCP 和 UPD 两种。
其中 UDP 是没有反馈信息的,发送方只管发送,不知道接收方是否 ...

嗯那,我用的就是tcp
只是同样的代码,如果我先发送,再接收,不成功
如果把发送代码复制在前,接收,然后再发送,却是成功了。
页: 1 [2]
查看完整版本: fortran语言实现socket通信/winsock