本文目錄一覽:
c語言系統庫之socket
ai參數應指向由getaddrinfo返回的第一個addrinfo結構。這個連表中的所有結構以及它們指向的任何動態存儲空間都被釋放掉。
在windows下,如何用純C語言實現socket網路編程?
mfc只是對socket進行了一些封裝,大部分人做
網路編程
都是用的原始的socket,比如如下介面都可以在c下進行調用
1.socket()
2.bind()
3.connect()
4.listen()
5.accept()
6.send()
和recv()
7.sendto()
和recvfrom()
8.close()
和shutdown()
9.
getpeername
()
10.
gethostname
()
這些介面是在Winsock2.h中定義的不是在mfc中定義的,你只需要包含Winsock2.h
頭文件
和
Ws2
_32.lib庫就可以了。
socket編程 c語言
sender 沒有看到 i 列印,是由於你沒有加換行,由於標準輸出是行緩衝,所以不會馬上列印,而是要等遇到 \n 或者進程結束才會列印。你可以寫成 printf(“%d\n”); 就能看到發送方的列印。
接收方也可以加上printf來列印。
這麼簡單的程序,用gdb自己調試也可以。
socket,linux用c語言實現
哦字元串回顯啊unix網路編程有好幾個版本,你可以去網上下它的源代碼(百度搜UNIX網路編程 源代碼),呃大部分被我的改的不成樣了,發個能用的給看看吧
//server
#includestdio.h
#includesys/socket.h
#includearpa/inet.h
#includenetinet/in.h
#includestdlib.h
#includestring.h
#includeunistd.h
#includeerrno.h
#includesignal.h
#define SERVPORT 1956
#define MAXLINE 100
typedef void Sigfunc(int);
void sig_chld(int signo)
{
pid_t pid;
int stat;
while( (pid = waitpid(-1, stat, WNOHANG)) 0)
printf(“child %d terminated\n”, pid);
return;
}
//read data from client, and write back to them
void str_echo(int sockfd)
{
ssize_t n;
char buf[MAXLINE];
again:
while( (n = read(sockfd, buf, MAXLINE)) 0 )
write(sockfd, buf, n);
if(n 0 errno ==EINTR)
goto again;
else if(n 0 )
printf(“error\n”);
}
int main(int argc, char** argv)
{
int listenfd, connfd;
socklen_t clilen;
pid_t childpid;
struct sockaddr_in servaddr, cliaddr;
if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) 0 )
{
printf(“socket fd error\n”);
return -1;
}
bzero(servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERVPORT);
if( bind(listenfd, (struct sockaddr *)servaddr, sizeof(servaddr)) 0 )
{
printf(“bind error\n”);
return -1;
}
int backlong = 0;
if(listen(listenfd, backlong) 0 )
{
printf(“listen error\n”);
return -1;
}
signal(SIGCHLD, sig_chld);
for(;;)
{
clilen = sizeof(cliaddr);
if( (connfd = accept(listenfd, (struct sockaddr *)cliaddr, clilen)) 0)
{
if(errno == EINTR) continue;
else printf(“accept error\n”);
return 0;
}
printf(“accept \n”);
if( (childpid = fork()) == 0 )
{
close(listenfd); //close child’s listen socket
str_echo(connfd);
exit(0);
}
close(connfd);
}
}
//client
#includestdio.h
#includesys/socket.h
#include arpa/inet.h
#include netinet/in.h
#include stdlib.h
#include string.h
#define MAXLINE 10
int main(int argc, char ** argv)
{
int sockfd, n;
char recvline[MAXLINE+1];
struct sockaddr_in servaddr,binaddr;
if(argc != 2)
{
printf(“usage: IPADDRESS\n”);
return -1;
}
if( (sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) 0)
{
printf(“socket error\n”);
return -1;
}
bzero(servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(15);
if(inet_pton(AF_INET, argv[1], servaddr.sin_addr)=0 )
{
printf(“inet_pton error for s \n”, argv[1]);
return -1;
}
int bindSock;
binaddr.sin_family = AF_INET;
inet_pton(AF_INET, “222.26.224.56”, binaddr.sin_addr);
binaddr.sin_port = htons(20000);
int reuse0 = 1;
if(setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)reuse0, sizeof(reuse0)) == -1)
{
printf(“set socket error\n”);
return -1;
}
if( bind(sockfd, (struct sockaddr *)binaddr, sizeof(servaddr)) 0 )
{
printf(“bind error\n”);
return -1;
}
if( connect(sockfd, (struct sockaddr*) servaddr, sizeof(servaddr) ) 0 )
{
printf(“connection refuse\n”);
return -1;
}
while( (n = read(sockfd, recvline, MAXLINE)) 0 )
{
recvline[n] = 0;
if(fputs(recvline, stdout) == EOF)
{
printf(“fputs error”);
return -1;
}
printf(“\n”);
}
if(n 0 )
{
printf(“read error”);
return -1;
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/304157.html