Linux下socket编程的发送问题?(悬赏100分!)

来源:百度知道 编辑:UC知道 时间:2024/07/02 09:59:57
本人在Linux下编写一个简单的服务器程序遇到以下问题,望高手赐教!
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#define SERVPORT 8080
#define BACKLOG 10
int sockfd,client_fd,sin_size;

int TCPSend(char data[])
{
int length;
length=send(sockfd,data,strlen(data),0);
if(length<=0)
{
printf("send data error!\n");
close(sockfd);
return(-1);
}
return (1);
}

main()
{
char data[100]="This is data!\n";
char buf[100];
char buf1[]="send data test!";
int recvbytes;
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
bzero(buf,100);
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("socket cr

int TCPSend(char data[])函数里面的send函数的第一个参数不是sockfd, 应该是client_fd.
sockfd一直在监听着, 所以这边用到的时候就内存错误直接退出了.
////////////////////////////////////////////////////////////////
你看下你的客户端是否有问题. (比如bind的端口号, 连接的端口号等) 我是在Ubuntu上运行的, 结果正常. 下面是我的客户端测试代码:
#include <sys/socket.h>
#include <arpa/inet.h>
#include <errno.h>

int main(void)
{
struct sockaddr_in cliaddr;
memset(&cliaddr, 0, sizeof(struct sockaddr_in));
cliaddr.sin_family = AF_INET;
cliaddr.sin_port = htons(2000);
cliaddr.sin_addr.s_addr = htons(INADDR_ANY);
memset(&cliaddr.sin_zero, 0, 8);

int sock = socket(AF_INET, SOCK_STREAM, 0);
if(-1 == sock)
{
printf("socket error\n");
return -1;
}
int brs = bind(sock, (struct sockaddr*)&cliaddr, sizeof(struct sockaddr_in));
if(-1 == brs)
{
printf("bind error&#