All things are difficult before they are easy. 没有软件的裸机是一具僵尸,没有硬件的软件是一个幽灵。2012,专注于Linux和C语言,关注自动化、性能测试,关注开源社区和开源测试工具、方法,尝试测试团队管理!
Linux Socket 基础实例 (C语言版)
上一篇 /
下一篇 2010-11-01 23:44:02
/ 个人分类:Linux
看了一下《Beginning Linux Programming》(4th Edition)中关于Socket的一章,对Linux下Socket程序有了更多的认识,现在摘录其中一个简单例子,很能表现一个Socket的基本流程。服务器端
server.c
/* server.c */ /* Make the necessary includes and set up the variables. */
#include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h>
int main() { int server_sockfd, client_sockfd; int server_len, client_len; struct sockaddr_in server_address; struct sockaddr_in client_address;
/* Remove any old socket and create an unnamed socket for the server. */
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
/* Name the socket. */
server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = htonl(INADDR_ANY); server_address.sin_port = htons(6666); server_len = sizeof(server_address); bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
/* Create a connection queue and wait for clients. */
listen(server_sockfd, 5); while(1) { char ch;
printf("server waiting\n");
/* Accept a connection. */
client_len = sizeof(client_address); client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);
/* We can now read/write to client on client_sockfd. */
read(client_sockfd, &ch, 1); ch++; write(client_sockfd, &ch, 1); close(client_sockfd); } }
|
客户端 client.c
/* clinet.c */ /* Make the necessary includes and set up the variables. */
#include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h>
int main() { int sockfd; int len; struct sockaddr_in address; int result; char ch = 'A';
/* Create a socket for the client. */
sockfd = socket(AF_INET, SOCK_STREAM, 0);
/* Name the socket, as agreed with the server. */
address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr("127.0.0.1"); address.sin_port = htons(6666); len = sizeof(address);
/* Now connect our socket to the server's socket. */
result = connect(sockfd, (struct sockaddr *)&address, len);
if(result == -1) { perror("oops: client3"); exit(1); }
/* We can now read/write via sockfd. */
write(sockfd, &ch, 1); read(sockfd, &ch, 1); printf("char from server = %c\n", ch); close(sockfd); exit(0); }
|
相关阅读:
- Linux初学者最常遇到的五个问题 (xin_晴, 2010-10-21)
- 十五个常用Linux命令行总汇 (xin_晴, 2010-10-22)
- 从开发者的角度学习Linux内存管理 (xin_晴, 2010-10-25)
- 教会你Linux Shell自动交互的三种方法 (xin_晴, 2010-11-16)
- Linux系统学习方法论 (xin_晴, 2010-10-27)
- 把你的Linux变成无线基站服务器 (xin_晴, 2010-10-28)
- Linux 内存监控内存丢失和处理方法 (xin_晴, 2010-10-29)
- Linux IPC资源清理 (smile665, 2010-10-31)
- Linux 进程间通信(IPC)简介 (smile665, 2010-10-31)
- Linux技巧:多核下绑定硬件/进程到不同CPU (xin_晴, 2010-11-01)
收藏
举报
TAG:
Linux
socket