服务器端:
===============================================================================================
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <time.h>
int sockfd;
void do_service(fd)
{
long t = time(0);
char *s = ctime(&t);
write(fd,s,strlen(s));
}
void out_client(struct sockaddr_in clientaddr)
{
char buffer[16];
inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,buffer,sizeof(clientaddr));
unsigned short port = ntohs(clientaddr.sin_port);
printf("client ip:%s (%d)\n",buffer,port);
}
int main(int argc,char *argv[])
{
if(argc < 2)
{
fprintf(stderr,"usage: %s port\n",argv[0]);
exit(1);
}
//create socket
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd < 0)
{
fprintf(stderr,"socket: %s\n",strerror(errno));
exit(1);
}
//set ip and port
struct sockaddr_in addr;
memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(argv[1]));
addr.sin_addr.s_addr = INADDR_ANY;
//bind ip and port
int len = sizeof(addr);
if(bind(sockfd,(struct sockaddr*)&addr,len) < 0)
{
fprintf(stderr,"bind: %s\n",strerror(errno));
exit(1);
}
//begin to listen
if(listen(sockfd,10) < 0)
{
fprintf(stderr,"listen: %s\n",strerror(errno));
exit(1);
}
while(1)
{
struct sockaddr_in clientaddr;
int c_len = sizeof(clientaddr);
int fd = accept(sockfd,(struct sockaddr*)&clientaddr,&c_len);
if(fd < 0)
{
fprintf(stderr,"accept: %s\n",strerror(errno));
continue;
}
out_client(clientaddr);
do_service(fd);
close(fd);
}
return 0;
}
==============================================================================================
客户端:
==============================================================================================
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
int sockfd;
int main(int argc,char *argv[])
{
if(argc < 3)
{
fprintf(stderr,"usage: %s port\n",argv[0]);
exit(1);
}
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd < 0)
{
fprintf(stderr,"socket:%s\n",strerror(errno));
exit(1);
}
struct sockaddr_in sockaddr;
memset(&sockaddr,0,sizeof(sockaddr));
sockaddr.sin_family = AF_INET;
sockaddr.sin_port = htons(atoi(argv[2]));
inet_pton(AF_INET,argv[1],&sockaddr.sin_addr.s_addr);
socklen_t len = sizeof(sockaddr);
if(connect(sockfd,(struct sockaddr*)&sockaddr,len) < 0)
{
fprintf(stderr,"connect: %s\n",strerror(errno));
exit(1);
}
char buffer[1024];
memset(buffer,0,sizeof(buffer));
ssize_t n;
if((n = read(sockfd,buffer,1024)) < 0)
{
fprintf(stderr,"read: %s\n",strerror(errno));
exit(1);
}
else
{
printf("%s\n",buffer);
}
return 0;
}
Unix c 网络编程 TCP
原创
©著作权归作者所有:来自51CTO博客作者RandTsui的原创作品,请联系作者获取转载授权,否则将追究法律责任

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Unix c 网络编程——编程基础
一个完整socket的相关描述(协议,本地地址,本地端口,远程地址,远程in,i
网络编程 unix socket c语言 #include -
Unix c 网络编程 UDP
服务器端:========================================
udp 网络编程 unix socket c语言 -
UNIX环境高级编程——TCP/IP网络编程
常用网络信息检索函数
#include unix 套接字 数据 文件描述符