Server Develop (一) 简单的TCP/IP C/S
2013-06-11 09:13
302 查看
简单的C/S
//server.h #include "utl.h" class server{ public: server(const short port); ~server(); int initServer(); void startListen(); //循环accept,可以通过继承来增加多线程 private: struct sockaddr_in server_addr; int sock_serv; };
//server.cc #include "server.h" #include "utl.h" server::server( const short port) { memset( &server_addr, 0, sizeof(server_addr) ); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(port); server_addr.sin_addr.s_addr = htonl( INADDR_ANY ); } server::~server() { close(sock_serv); } int server::initServer() { sock_serv = socket(AF_INET, SOCK_STREAM, 0); if(sock_serv < 0){ perror("socket error!\n"); return -1; } int on = 1; setsockopt( sock_serv, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) ); int flag = bind(sock_serv, (struct sockaddr*)&server_addr, sizeof(server_addr)); if(flag < 0){ perror("bind error!\n"); close(sock_serv); return -1; } return 0; } void server::startListen() { int flag = listen(sock_serv, 5); if(flag < 0){ perror("listen error!\n"); close(sock_serv); return; } char buffer[1024]; while(1){ bzero(buffer,sizeof(buffer)); struct sockaddr_in client_addr; int size = sizeof(client_addr); int sock_client = accept(sock_serv, (struct sockaddr*)(&client_addr), (unsigned int*)(&size)); if(sock_client < 0){ perror("accept error!\n"); continue; } strcpy(buffer, "this is server! welcome!\n"); send(sock_client, buffer, 1024, 0); bzero(buffer,sizeof(buffer)); flag = recv(sock_client, buffer, 1024, 0); if(flag < 0){ perror("recv error!\n"); close(sock_serv); return; } printf("recv : %s\n",buffer); while(1){ bzero(buffer,sizeof(buffer)); flag = recv(sock_client, buffer, 1024, 0); if(flag < 0){ perror("recv error!\n"); close(sock_serv); return; } printf("i have recv buffer\n"); printf("recv : %s\n",buffer); if(strcmp(buffer,"quit") == 0){ printf("quit!!!\n"); break; } } } }
//client.cc #include <stdio.h> #include <string.h> #include <sys/socket.h> #include <errno.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/types.h> #include <unistd.h> #include <iostream> using namespace std; int main(int argc, char** argv) { int sock_client; struct sockaddr_in server_addr; sock_client = socket(AF_INET, SOCK_STREAM, 0); if(sock_client < 0 ){ perror("socket error!\n"); return -1; } bzero(&server_addr, sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8000); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); int flag; flag = connect(sock_client,(struct sockaddr*)(&server_addr), sizeof(struct sockaddr)); if(flag < 0){ perror("connect error!\n"); close(sock_client); return -1; } printf("connect to server : OK! \n"); char buffer[1024]; //printf("%s\n",buffer); bzero(buffer,sizeof(buffer)); recv(sock_client, buffer, 1024, 0); printf("recv : %s\n", buffer); bzero(buffer,sizeof(buffer)); strcpy(buffer,"this is client!\n"); send(sock_client, buffer, 1024, 0); while(1){ bzero(buffer,sizeof(buffer)); cin>>buffer; int p = strlen(buffer); buffer[p] = '\0'; send(sock_client, buffer, 1024, 0); printf("i have send buffer\n"); } close(sock_client); return 0; }
相关文章推荐
- service structure flowchart [mobile to server via HTTP RESTful API and TCP/IP in a map]
- 三十天学不会TCP,UDP/IP网络编程-UDP,从简单的开始
- TCP-IP学习笔记二:NIO的网络编程Buffer简单使用
- com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。 java.net.ConnectException: Conn
- [CODE] 通过tcpserver实现对同一IP的最大连接数和连接频率的限制
- 简单理解Socket及TCP/IP、Http、Socket的区别
- TCP/IP、Http、Socket 简单理解
- 2003 SERVER 本地连接 TCP/IP问题[转]
- tcp/ip简单认识
- 用TCP/IP实现自己简单的应用程序协议:最后再返回来看HTTP协议
- TCP/IP模型的一个简单解释
- Linux网络编程socket的简单应用(基于server和client 的tcp)
- VC++ Socket编程 简单的Tcp/ip客户端
- TCP/IP 协议简单分析
- jdbc连接数据库失败,com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。
- 关于mysql报错:Can't start server: Bind on TCP/IP port: Permission denied
- com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败
- Linux基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- 【tcp-ip学习总结】使用tcp协议实现简单的通信小程序