- 论坛徽章:
- 0
|
我是按照sunlan 兄的说法作的
环境是unix,参考的是unix网络编程的一个例子,连接都能建立,顺利的执行到connect server2,建立连接后在send data to server2(sock2);时报文丢失了,我不明白为什么,后来我单独写了个测试的client能够顺利传送报文。
程序如下
#include "unp.h"
#define DEBUG
#define BASPORT
#define LOCALPORT
#define LOCALADDR
#define BASHOST
int
bascom(char *sDATA, char *rDATA)
{
int sockfd;
char sndpkg[MAXLINE];
char rcvpkg[MAXLINE];
struct sockaddr_in servaddr;
struct sockaddr_in cliaddr;
memset(sndpkg, '\0',sizeof(sndpkg));
memset(rcvpkg, '\0',sizeof(rcvpkg));
strncpy(sndpkg, sDATA,strlen(sDATA));
#ifdef DEBUG
printf("sndpkg= [%s]\n",sockfd,sndpkg);
/*sndpkg的内容存在*/
#nedif
sockfd = Socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(BASPORT);
Inet_pton(AF_INET, BASHOST, &servaddr.sin_addr);
cliaddr.sin_family = AF_INET;
cliaddr.sin_port = htons(LOCALPORT);
Inet_pton(AF_INET,LOCALADDR, &cliaddr.sin_addr);
Bind(sockfd, (SA *) &cliaddr, sizeof(cliaddr));
Connect(sockfd, (SA *) &servaddr, sizeof(servaddr));
#ifdef DEBUG
printf("befor transfer,sockfd= [%d] sndpkg= [%s]\n",sockfd,sndpkg);
/*此时,sndpkg的内容没了*/
#nedif
while( NULL !=sndpkg)
{
Writen(sockfd, sndpkg, strlen(sndpkg));
if (Readline(sockfd, rcvpkg, MAXLINE) == 0)
err_quit("cli read: server terminated prematurely");
#ifdef DEBUG
printf("rcvpkg=[%s]\n",rcvpkg);
#nedif
Close(sockfd);
}
strncpy(rDATA, rcvpkg,strlen(rcvpkg));
#ifdef DEBUG
printf("COM's RDATA is [%s]\n", rDATA);
#endif
exit(0);
} |
|