c语言网络编程函数(c 网络编程实例)

http://www.itjxue.com  2023-02-23 14:48  来源:未知  点击次数: 

基于c语言,网络编程,服务器接收客户端1的信息发送给客户端2

char

buff2[1024*10];

int

receiveLen;

/*调用accept函数,等待客户端的连接*/

client_fd=accept(sockfd,(struct

sockaddr

*)client_sockaddr,sin_size

/*调用recv函数接收客户端的请求*/

recvbytes=recv(client_fd,buf,BUFFER_SIZE,0)

typedef

int

(WINAPI

ICEPUB_TCPSENDANDRECEIVETEXT)(char

*sendBuff,

int

sendBuffLen,char

*recvBuff,int

recvMaxLen,char*

serverIP,int

serverPort);

ICEPUB_TCPSENDANDRECEIVETEXT

*icePub_tcpSendAndReceiveText

=

0;

HINSTANCE

hDLLDrv

=

LoadLibrary

("icePubDll.dll");

if(hDLLDrv)

{

icePub_tcpSendAndReceiveText=(ICEPUB_TCPSENDANDRECEIVETEXT

*)

GetProcAddress

(hDLLDrv,"icePub_tcpSendAndReceiveText");

}

if(icePub_tcpSendAndReceiveText)

receiveLen=icePub_tcpSendAndReceiveText(buf,recvbytes),buff2,1024*10,"192.168.1.2",8000);

if(hDLLDrv)

FreeLibrary(hDLLDrv);

AfxMessageBox

(buff2);

C语言 网络编程 关于accept函数的问题

你的两个调用方式最后一个参数,意义完全不同,addrlen是将addrlen的地址传给accept(是一个可以写的变量地址)

而你的后一个,是将sizeof(addr)它是一个常量,一般为4,转为指针传给accept,这个地址是不可写的

Linux C语言网络编程问题!

unsigned int dir(char * server) {

int sck;//套接字变量

struct sockaddr_in serv_adr; //远程主机的地址

struct hostent *host; //指向远程主机的指针

unsigned char databuf[FILEBUF_SIZE]; //数据

int bytes = 0, bytesread = 0; //字节数,读取到的字节数

host = gethostbyname(server); //根据远程主机的主机名,得到指向远程主机的指针

if (host == (struct hostent *) NULL) { //如果得到指向远程主机的指针失败,报告错误,并返回

perror("gethostbyname failed");

return 0;

}memset(serv_adr, 0, sizeof(serv_adr)); //初始化远程主机的地址,结构体内所有成员清零

serv_adr.sin_family = AF_INET; //设置地址类型

memcpy(serv_adr.sin_addr, host-h_addr, host-h_length);//取出指向远程主机的指针中包含的地址信息,赋给远程主机地址变量

serv_adr.sin_port = htons(SERVICE_PORT);//设置端口号,比如http服务对应80端口,ftp对应21端口

if ((sck = socket(AF_INET, SOCK_STREAM, 0)) 0) { //如果建立TCP协议的套接字失败,报告错误,并返回

perror("error on socket()");

return 0;

}

if (connect(sck, (struct sockaddr *)serv_adr, sizeof(serv_adr)) 0) {//如果使用该套接字连接到远程主机失败,报告错误,并返回

perror("error on connect()");

return 0;

}write(sck, "DI\n\n", 4); //连接成功,发送内容为"DI\n\n"的消息,远程主机收到该消息,解析后生成目录列表,并将目录列表信息传递回来

printf("Remote directory listing:\n");//输出提示信息“远程主机正在生成目录列表”

while ((bytes = read(sck, databuf, FILEBUF_SIZE)) 0) { //从套接字的数据流中读取远程主机的返回信息(即目录列表),每次读取FILEBUF_SIZE个字节,直到全部读取完毕

write(fileno(stdout), databuf, bytes);//将每次读到的数据,输出到标准输出流(stdout),即屏幕上

bytesread += bytes;//接收到的字节数累加

}

close(sck); /* Close the socket */ //通信完成,关闭套接字,关闭连接

return bytesread; //返回读取到的字节数(即远程主机返回的信息的大小)

}

(责任编辑:IT教学网)

更多

推荐网站经济文章