Linux socket 编程简单例子
2015-03-30 23:17
375 查看
Linux socket 编程简单例子
实例程序来自L L. Peterson & B S. Davie, Computer Networks: A System Approach, fifth edition, 第1.4节client 端
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define SERVER_PORT 5432 #define MAX_LINE 256 int main(int argc, char* argv[]) { FILE *fp; struct hostent *hp; struct sockaddr_in sin; char *host; char buf[MAX_LINE]; int s; int len; if (argc==2) { host = argv[1]; } else { fprintf(stderr, "usage: simplex-talk host\n"); exit(1); } /* translate host name into peer's IP address */ hp = gethostbyname(host); if(!hp) { fprintf(stderr, "simplex-talk: unkown host : %s\n", host); exit(1); } /* build address data structure */ bzero((char*)&sin, sizeof(sin)); sin.sin_family = AF_INET; bcopy(hp->h_addr, (char*)&sin.sin_addr, hp->h_length); sin.sin_port = htons(SERVER_PORT); /* active open */ if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) { perror("simplex-talk: socket"); exit(1); } if (connect(s, (struct sockaddr*)&sin, sizeof(sin)) < 0) { perror("simplex-talk: connect"); close(s); exit(1); } /* main loop */ while (fgets(buf, sizeof(buf), stdin)) { buf[MAX_LINE-1] = '\0'; len = strlen(buf) + 1; send(s, buf, len, 0); } }
server端
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define SERVER_PORT 5432 #define MAX_PENDING 5 #define MAX_LINE 256 int main() { struct sockaddr_in sin, csin; char buf[MAX_LINE]; int len; int s, new_s; int on; /* build address data structure */ bzero((char*)&sin, sizeof(sin)); sin.sin_family = AF_INET; // sin.sin_addr.s_addr = inet_addr("127.0.0.1");; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(SERVER_PORT); /* setup passive open */ if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) { perror("simplex-talk: socket"); exit(1); } /* enable address reuse */ // http://www.ibm.com/developerworks/cn/linux/l-sockpit/ on = 1; setsockopt( s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); if ((bind(s, (struct sockaddr*)&sin, sizeof(sin))) < 0) { perror("simplex-talk: bind"); exit(1); } listen(s, MAX_PENDING); /* wait for connection, then receive and print text */ while(1) { if ((new_s = accept(s, (struct sockaddr*)&csin, &len)) < 0) { perror("simplex-talk: accept"); exit(1); } while (len = recv(new_s, buf, sizeof(buf), 0)) { fputs(buf, stdout); } close(new_s); } }
原书中程序的accept函数直接用sin做参数,运行时会出现错误;新建立一个sockaddr_in变量csin,传给accept函数做参数,错误消失。
相关文章推荐
- linux socket编程以及简单的tcp,udp的例子
- Linux socket编程示例(最简单的TCP和UDP两个例子)
- Linux下Socket编程简单例子
- linux网络编程之socket(三):最简单的回射客户/服务器程序、time_wait 状态
- Linux socket编程(三) 简单的多线程聊天室
- Linux下的简单socket编程示例
- linux下socket通信,server和client简单例子
- Linux下socket编程实现客户机服务器通信的例子
- 简单的-TCP服务端 - Linux socket编程入门(1)
- [C++] Windows下的socket编程(这是一个简单的TCP/IP例子)
- 简单的IPv6 UDP/TCP socket编程 -- 两台Linux实现简单的ipv6通信
- socket编程——一个简单的例子
- Linux socket编程(四) 简单聊天室之epoll版
- Linux下Socket网络编程,文件传输,数据传输的C语言例子
- socket编程——一个简单的例子
- socket编程:服务器与客户端简单交互的例子
- socket编程——一个简单的例子
- Linux下的TCP Socket简单例子
- socket编程的最简单实例 - linux系统编程及驱动开发 - 小超嵌入式工作室 嵌入式开发学习交流论坛 XC-STC XC2440技术支持 - Powered by Discuz!
- Linux C Socket编程原理及简单实例