c语言socket编程(基础)
来源:互联网 发布:淘宝黑刷干货 编辑:程序博客网 时间:2024/05/29 19:07
Sockets Tutorial 对C语言的socket编程做了详细描述,这里记录一下
服务端程序:
/* * server.c * * Created on: 2016-7-26 * Author: qiu *//* A simple server in the internet domain using TCP The port number is passed as an argument */#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>void error(char *msg) {perror(msg);exit(1);}int main(int argc, char *argv[]) {int sockfd, newsockfd, portno, clilen;char buffer[256];struct sockaddr_in serv_addr, cli_addr;int n; /* Allocate a new socket,Returns a file descriptor for the new socket, or -1 for errors. */ //the first is the address domain of the socket. recall that there are two possile address domains //the unic domain for two processes which share a common file system, and the internet domain for //any two hosts on the Internet. The symbol constant AF_UNIX is used for the former, and //AF_INET is used for the latter //第二个参数表示类型,SOCK_STREAM表示TCP,SOCK_DGRAM表示UDP //这个函数返回an entry into the file descriptor table (i.e. a small integer),this value is used for all // subsequent references to this socketsockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd < 0)error("ERROR opening socket");bzero((char *) &serv_addr, sizeof(serv_addr));//portno = atoi(argv[1]);portno = 51717;serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = INADDR_ANY; //这个INADDR_ANY是一个常量0,在服务端就是这个样子?表示本机地址serv_addr.sin_port = htons(portno);//将一个socket绑定到一个地址if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)error("ERROR on binding");//listen的第二个参数is the size of the backlog queue,i.e., the number of connections that can be//waiting while the process if handling a particular connectionlisten(sockfd, 5);clilen = sizeof(cli_addr);//accept一直阻塞,一直等到一个client连接到server,返回一个新的文件描述符,所有的通信都由新的描述符完成newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);if (newsockfd < 0)error("ERROR on accept");//这里只接收256个字符,超过的被截断了bzero(buffer, 256);n = read(newsockfd, buffer, 255);if (n < 0)error("ERROR reading from socket");printf("Here is the message: %s\n", buffer);//往文件描述符里写信息n = write(newsockfd, "I got your message", 18);if (n < 0)error("ERROR writing to socket");return 0;}
客户端程序:
/* * client.c * * Created on: 2016-7-26 * Author: qiu */#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>void error(char *msg) {perror(msg);exit(0);}int main(int argc, char *argv[]) {int sockfd, portno, n;struct sockaddr_in serv_addr;//struct hostent defines a host computer on the Internetstruct hostent *server;char buffer[256];if (argc < 3) {fprintf(stderr, "usage %s hostname port\n", argv[0]);exit(0);}portno = atoi(argv[2]);sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd < 0)error("ERROR opening socket");//通过域名获取关于服务器的描述server = gethostbyname(argv[1]);if (server == NULL) {fprintf(stderr, "ERROR, no such host\n");exit(0);}bzero((char *) &serv_addr, sizeof(serv_addr));serv_addr.sin_family = AF_INET;bcopy((char *) server->h_addr,(char *)&serv_addr.sin_addr.s_addr,server->h_length);serv_addr.sin_port = htons(portno);//establish a connection to the serverif (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)error("ERROR connecting");printf("Please enter the message: ");bzero(buffer, 256);//从标准输入获取字符,并写入到socket的文件描述符中fgets(buffer, 255, stdin);n = write(sockfd, buffer, strlen(buffer));if (n < 0)error("ERROR writing to socket");bzero(buffer, 256);n = read(sockfd, buffer, 255);if (n < 0)error("ERROR reading from socket");printf("%s\n", buffer);return 0;}
0 0
- c语言socket编程(基础)
- C语言编程---socket基础
- c语言Socket编程
- c语言 socket编程
- c语言socket编程
- Socket编程--c语言
- C语言SOCKET编程
- c#socket编程基础
- c#socket 编程基础
- c#socket编程基础
- C#socket编程基础
- linux socket 编程(C语言)
- linux socket 编程(C语言)
- linux socket 编程(C语言)
- linux socket 编程(C语言) .
- linux socket 编程(C语言)
- Socket编程(c语言示例)
- Socket编程(c语言示例)
- PyGobject(十)布局容器之Button篇——Gtk.CheckButton
- ubuntu14.04命令行直接安装jdk适合新手
- 走遍非洲 —— 埃及
- eclipse下新建hadoop项目
- Linux /proc/cpuinfo
- c语言socket编程(基础)
- Java 加密解密技术学习之BASE64
- controller中request变量的用法
- 控制流-(判断语句)
- JVM需要熟练掌握的知识点
- PHP进阶(四)——cookie与session
- 石头剪刀布 app
- 结合友盟统计的多渠道快速打包
- zbar和zxing之间的对比