- 论坛徽章:
- 1
|
今天用测试了一下UDT, 局域网内网速能达到80Mb/sec,
然后我就写了一个简单的TCP的文件传输,,结果出问题了.
这是server端,
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <errno.h>
- #include <sys/socket.h>
- #include <arpa/inet.h>
- #include <netdb.h>
- #include <unistd.h>
- int main (int argc, char *argv[])
- {
- int m_hSocket = 0;
- m_hSocket = socket (AF_INET, SOCK_STREAM, 0);
- struct sockaddr_in m_nLocalAddr;
- struct sockaddr_in m_nPeerAddr;
- memset (&m_nLocalAddr, 0, sizeof (struct sockaddr_in));
- m_nLocalAddr.sin_family = AF_INET;
- m_nLocalAddr.sin_addr.s_addr = INADDR_ANY;//inet_addr ("192.168.51.250");//INADDR_ANY;
- m_nLocalAddr.sin_port = htons (9991);
- int on = 1;
- int result = setsockopt(m_hSocket, SOL_SOCKET, SO_REUSEADDR, (char *) & on, sizeof(on));
- bind (m_hSocket, (struct sockaddr*)&m_nLocalAddr, sizeof(m_nLocalAddr));
- listen (m_hSocket, 5);
- socklen_t addrLen = sizeof (struct sockaddr);
- m_hSocket = accept (m_hSocket, (struct sockaddr *)&m_nPeerAddr, &addrLen);
- printf ("accept one\n");
- char buff[1400];
- memset (buff, 0, 1400);
- int fd = open ("file", O_RDWR);
- int len = 0;
- while (1)
- {
- printf ("start to recv data\n");
- len = read (fd, buff, 1400-4);
- if (len <= 0)
- {
- perror ("read");
- break;
- }
- //len = htonl (len);
- struct iovec iov[2];
- iov[0].iov_base = &len;
- iov[0].iov_len = sizeof (int);
- iov[1].iov_base = buff;
- iov[1].iov_len = len;
- int ret = writev (m_hSocket, iov, 2);
- if (ret < 0)
- {
- perror ("writev");
- break;
- }
- }
- return 0;
- }
复制代码
这是接入文件的client端
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <errno.h>
- #include <sys/socket.h>
- #include <arpa/inet.h>
- #include <netdb.h>
- #include <unistd.h>
- int main (int argc, char *argv[])
- {
- struct sockaddr_in peerAddr;
- int ret = 0;
- memset (&peerAddr, 0, sizeof (peerAddr));
- peerAddr.sin_addr.s_addr = inet_addr (argv[1]);
- printf ("ip=%s\n", argv[1]);
- peerAddr.sin_family = AF_INET;
- peerAddr.sin_port = htons (9991);
- int m_hSocket = 0;
- m_hSocket = socket (AF_INET, SOCK_STREAM, 0);
- socklen_t addrLen = sizeof (peerAddr);
- if (connect (m_hSocket, (struct sockaddr*)&peerAddr, addrLen))
- {
- printf ("connect failed\n");
- perror ("connect");
- return 0;
- }
- printf ("connect succ\n");
- char buff[1400];
- memset (buff, 0, 1400);
- int fd = open ("localfile", O_CREAT | O_RDWR , 0644);
- while (1)
- {
- int len = recv (m_hSocket, buff, 4, 0);
- if (len <= 0)
- {
- perror ("recv");
- break;
- }
- int datelen = 0;
- memcpy (&datelen, buff, 4);
- //datelen = ntohl (datelen);
- printf ("date len = %d\n", datelen);
- len = recv (m_hSocket, buff, datelen, 0);
- if (len <= 0)
- {
- perror ("recv2");
- break;
- }
- int ret = write (fd, buff, len);
- if (ret <= 0)
- {
- perror ("write");
- break;
- }
- memset (buff, 0, 1400);
- }
- close (fd);
- close (m_hSocket);
- return 0;
- }
复制代码
client 执行结果是
- [root@localhost app]# ./recv 192.168.51.250
- ip=192.168.51.250
- connect succ
- date len = 1396
- date len = 1396
- date len = 1396
- date len = 1835887981
复制代码
为什么后来的数据长度就变成1835887981这么大了..
server 执行结果
- [root@Enter-Dev-250 cui]# ./send
- accept one
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- start to recv data
- read len = 1396
- writev: Connection reset by peer
复制代码 |
|