socket通信基本流程
2013-02-03 16:13
204 查看
Server端:
client端:
#include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <string.h> #include <stdlib.h> int serverPort = 8000; int main() { struct sockaddr_in listeningSockAddr; struct sockaddr_in clientSockAddr; int clientAddrSize; int listeningSock; int comunicateSock; char clientStr[100],str1[20],str2[20],str3[20]; char toClientBuf[100]; int clientStrLen,toClientBufLen; float c; //建立socket listeningSock =socket(AF_INET,SOCK_STREAM,0); if(listeningSock == -1){ perror("socket failed"); exit(1); } //建立IPv4地址 bzero(&listeningSockAddr,sizeof(listeningSockAddr)); listeningSockAddr.sin_family = AF_INET; listeningSockAddr.sin_addr.s_addr = htonl(INADDR_ANY);//监听所有ip地址 listeningSockAddr.sin_port = htons(serverPort); //绑定socket if(bind(listeningSock,(struct sockaddr *)&listeningSockAddr,sizeof(listeningSockAddr)) == -1){ perror("bind failed"); exit(1); } //监听client端 if(listen(listeningSock,20) == -1){ perror("call to listen"); exit(1); } while(1){ printf("Accepting connections ... \n"); //接受Client端连接 comunicateSock = accept(listeningSock,(struct sockaddr*)&clientSockAddr,&clientAddrSize);//如果不再乎客户端的ip,那第二,三个参数可设为NULL if(comunicateSock == -1){ perror("accept failed"); exit(1); } printf("客户端的ip:%s,端口号:%d\n",inet_ntoa(clientSockAddr.sin_addr),clientSockAddr.sin_port); //接收client端传来的信息 clientStrLen = recv(comunicateSock,clientStr,100,0); clientStr[clientStrLen] = '\0'; printf("Received %d characters from client,the string is:%s\n",clientStrLen,clientStr); //分析处理Client端传来的信息 if(clientStrLen > 0){ strcpy(str1,strtok(clientStr," ")); printf("第1个字符串为:%s\n",str1); strcpy(str2,strtok(NULL," ")); printf("第2个字符串为:%s\n",str2); strcpy(str3,strtok(NULL," ")); printf("第3个字符串为:%s\n",str3); c = atof(str3)*1.05; sprintf(toClientBuf,"商 品 号 为 %s \n商 品 名 为 %s\n含 税 价 为 %.2f\n",str1,str2,c); } //将处理过的信息返回给Client端 toClientBufLen = strlen(toClientBuf); if(send(comunicateSock,toClientBuf,toClientBufLen,0) == -1){ perror("call to send"); exit(1); } //关闭与Client端的连接 close(comunicateSock); } return 0; }
client端:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> int serverPort = 8000; int main(int argc,char *argv[]) { struct sockaddr_in serverSock; int bindingServerAddrSock; char buf[8192]; char *str = "A001 电视机 20000.00"; printf("使用方法:client 字符串\n"); if(argc < 2){ printf("argc < 2,使用默认字符串\n"); } else{ str = argv[1]; } /*建立Server IPv4地址 */ bzero(&serverSock,sizeof(serverSock)); serverSock.sin_family = AF_INET; serverSock.sin_addr.s_addr = inet_addr("127.0.0.1"); serverSock.sin_port = htons(serverPort); /* 建立Socket */ bindingServerAddrSock = socket(AF_INET,SOCK_STREAM,0); if(bindingServerAddrSock == -1){ perror("socket failed"); exit(1); } /*连接Server */ if(connect(bindingServerAddrSock,(void *)&serverSock,sizeof(serverSock)) == -1){ perror("connect failed"); exit(1); } /*将str字符串传给 Server */ printf("Sending message %s to server ...\n",str); if(send(bindingServerAddrSock,str,strlen(str),0) == -1){ perror("error in sending\n"); exit(1); } /*接收Server回传的信息 */ if(recv(bindingServerAddrSock,buf,8192,0) == -1){ perror("Error in receiving"); exit(1); } printf("\nResponse these from server :%s\n",buf); close(bindingServerAddrSock); return 0; }
相关文章推荐
- socket通信基本流程
- socket通信的基本流程
- socket通信基本流程
- Socket通信基本流程
- 基本Socket通信流程
- socket通信基本流程
- socket通信基本流程
- C# Socket通信应用实现 基本流程
- Socket的含义及TCP Socket通信的基本流程
- socket通信基本流程
- Qt 简单的 tcp socket 通信流程
- C++课堂(概念提前知)我在QQ群32347435中的讲课内容所涉及到的部分概念 Windows下socket基本流程与初步封装
- SOCKET通信的基本步骤
- socket通信流程
- Linux - 面向连接的socket通信流程
- Socket 通信流程
- java-基本的Socket编程-实现服务器端和客户端通信
- linux网络编程之socket(二):C/S程序的一般流程和基本socket函数
- Android USB转串口通信开发基本流程
- linux网络编程之socket(二):C/S程序的一般流程和基本socket函数