本文目录一览:
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;
}
}