求助,最简单的socket程序。
时间:2010-08-15
来源:互联网
最近开始接触socket程序。
拿unp第5章的那个tcp cli/serv实例来实验一下。
结果问题出现了,启动客户端程序都时候总是error。
另外,被几个问题搞混了。
1、AF_UNIX和AF_INET到底有什么区别?我是在本机上实验的,那么这个参数该选什么呢?
是不是服务器设置成什么,客户端也要设置成什么吗?
2、还有就是 sockadd 的问题,到底是用 sockadd还是 sockadd_in。
如果用AF_UNIX的话,sockadd里面的地址该写成什么呢。
问题太多了,并且感觉很复杂啊。
拿unp第5章的那个tcp cli/serv实例来实验一下。
结果问题出现了,启动客户端程序都时候总是error。
另外,被几个问题搞混了。
1、AF_UNIX和AF_INET到底有什么区别?我是在本机上实验的,那么这个参数该选什么呢?
是不是服务器设置成什么,客户端也要设置成什么吗?
2、还有就是 sockadd 的问题,到底是用 sockadd还是 sockadd_in。
如果用AF_UNIX的话,sockadd里面的地址该写成什么呢。
问题太多了,并且感觉很复杂啊。

作者: pandaiam 发布时间: 2010-08-15

- /**
- * Tcp Server program, It is a simple example only.
- * zhengsh 200520602061 2
- * when client connect to server, send a welcome message and timestamp in server.
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/socket.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <netinet/in.h>
- #include <time.h>
-
- #define SERVER_PORT 20000 // define the defualt connect port id
- #define LENGTH_OF_LISTEN_QUEUE 10 //length of listen queue in server
- #define BUFFER_SIZE 255
- #define WELCOME_MESSAGE "welcome to connect the server. \n "
-
-
- int main(int argc, char **argv)
- {
- int servfd,clifd;
- struct sockaddr_in servaddr,cliaddr;
-
- if ((servfd = socket(AF_INET,SOCK_STREAM,0)) < 0)
- {
- printf("create socket error!\n");
- exit(1);
- }
- bzero(&servaddr,sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- servaddr.sin_port = htons(SERVER_PORT);
- servaddr.sin_addr.s_addr = htons(INADDR_ANY);
-
- if (bind(servfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
- {
- printf("bind to port %d failure!\n",SERVER_PORT);
- exit(1);
- }
-
- if (listen(servfd,LENGTH_OF_LISTEN_QUEUE) < 0)
- {
- printf("call listen failure!\n");
- exit(1);
- }
-
- while (1)
- {//server loop will nerver exit unless any body kill the process
- char buf[BUFFER_SIZE];
- long timestamp;
- socklen_t length = sizeof(cliaddr);
- clifd = accept(servfd,(struct sockaddr*)&cliaddr,&length);
- if (clifd < 0)
- {
- printf("error comes when call accept!\n");
- break;
- }
- strcpy(buf,WELCOME_MESSAGE);
- //inet_ntop(INET_ADDRSTRLEN,cliaddr.sin_addr,buf,BUFFER_SIZE);
-
- //printf("from client,IP:%s,Port:%d\n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
- timestamp = time(NULL);
- strcat(buf,"timestamp in server:");
- strcat(buf,ctime(×tamp));
- send(clifd,buf,strlen(buf) + 1,0);
- close(clifd);
-
- }//exit
- close(servfd);
- return 0;
- }
- /* Tcp client program, It is a simple example only.
- * zhengsh 200520602061 2
- * connect to server, and echo a message from server.
- */
-
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/socket.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <netinet/in.h>
-
- #define SERVER_PORT 20000 // define the defualt connect port id
- #define CLIENT_PORT ((20001+rand())%65536) // define the defualt client port as a random port
-
- #define BUFFER_SIZE 255
- #define REUQEST_MESSAGE "welcome to connect the server.\n"
-
- void usage(char *name)
- {
- printf("usage: %s IpAddr\n",name);
- }
-
- int main(int argc, char **argv)
- {
- int servfd,clifd,length = 0;
- struct sockaddr_in servaddr,cliaddr;
- socklen_t socklen = sizeof(servaddr);
- char buf[BUFFER_SIZE];
-
- if (argc < 2)
- {
- usage(argv[0]);
- exit(1);
- }
-
- if ((clifd = socket(AF_INET,SOCK_STREAM,0)) < 0)
- {
- printf("create socket error!\n");
- exit(1);
- }
- srand(time(NULL));//initialize random generator
- bzero(&cliaddr,sizeof(cliaddr));
- cliaddr.sin_family = AF_INET;
- cliaddr.sin_port = htons(CLIENT_PORT);
- cliaddr.sin_addr.s_addr = htons(INADDR_ANY);
-
- bzero(&servaddr,sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- inet_aton(argv[1],&servaddr.sin_addr);
- servaddr.sin_port = htons(SERVER_PORT);
- //servaddr.sin_addr.s_addr = htons(INADDR_ANY);
-
- if (bind(clifd,(struct sockaddr*)&cliaddr,sizeof(cliaddr))<0)
- {
- printf("bind to port %d failure!\n",CLIENT_PORT);
- exit(1);
- }
-
- if (connect(clifd,(struct sockaddr*)&servaddr, socklen) < 0)
- {
- printf("can't connect to %s!\n",argv[1]);
- exit(1);
- }
-
- length = recv(clifd,buf,BUFFER_SIZE,0);
- if (length < 0)
- {
- printf("error comes when recieve data from server %s!",argv[1]);
- exit(1);
- }
- printf("from server %s :\t%s \n",argv[1],buf);
-
- close(clifd);
- return 0;
- }
作者: evaspring 发布时间: 2010-08-15
楼上不要只铁代码啊。
解答一下问题。
解答一下问题。

作者: pandaiam 发布时间: 2010-08-15
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28