• socket编程实例TCP


    Socket编程简单实例,TCP链接,服务器返回客户端发送内容!


    客户端代码:tcpclient.cpp

    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    #include <stdlib.h>
    
    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    
    #define trace printf
    #define MAX_BUFFER_SIZE 128
    
    int main(int argc, char* argv[])
    {
    	int port = 0;
    	
    	if(argc != 4)
    	{
    		trace("params error !\n");
    		trace("example:10.12.2.250 8000 hello\n");
    		return 0;
    	}
    
    	for(int ii = 0; ii < argc; ii++)
    	{
    		trace("***param %d: %s\n", ii + 1, argv[ii]);
    	}
    
    	port = atoi(argv[2]);
    	
    	int sock = -1, ret = -1, recv_len = 0;
    	struct sockaddr_in server;
    
    	memset(&server, 0, sizeof(server));
    	server.sin_family = AF_INET;
    	server.sin_port = htons(port);
    	server.sin_addr.s_addr = inet_addr(argv[1]);
    
    	if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    	{
    		trace("create socket error !\n");
    		return 0;
    	}
    	
    	if(connect(sock, (struct sockaddr*)&server, sizeof(server)) < 0)
    	{
    		trace("connect server error !\n");
    		close(sock);
    		return 0;
    	}
    	trace("connect server success !\n");
    
    	char buffer[MAX_BUFFER_SIZE] = {0};
    	strncpy(buffer, argv[3], sizeof(buffer) - 1);
    
    	if((send(sock, buffer, strlen(buffer) + 1, 0)) == -1)
    	{
    		trace("send buffer error !\n");
    		close(sock);
    		return 0;
    	}
    	trace("send buffer success !\n");
    
    	memset(buffer, 0, sizeof(buffer));
    	if((recv_len = recv(sock, buffer, sizeof(buffer), 0)) != -1)
    	{
    		trace("recv buffer success len = %d!\n", recv_len);
    		
    		trace("server respond:%s\n", buffer);
    	}
    	else
    	{
    		trace("recv buffer error !\n");
    	}
    
    	trace("close sock success !\n");
    	close(sock);
    	return 0;
    }
    

    服务器代码:tcpserver.cpp

    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    #include <stdlib.h>
    
    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    
    #define trace printf
    #define MAX_BUFFER_SIZE 128
    
    int main(int argc, char* argv[])
    {
    	int port = 0;
    	
    	if(argc != 2)
    	{
    		trace("params error , need assign port!\n");
    		return 0;
    	}
    	
    	port = atoi(argv[1]);
    
    	int sock = -1, sock_connect = -1;
    	struct sockaddr_in server;
    	
    	memset(&server, 0, sizeof(server));
    	server.sin_family = AF_INET;
    	server.sin_port = htons(port);
    	server.sin_addr.s_addr = htonl(INADDR_ANY);
    
    	if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    	{
    		trace("create socket error !\n");
    		return 0;
    	}
    	
    	if(bind(sock, (struct sockaddr*)&server, sizeof(server)) < 0)
    	{
    		trace("socket bind error !\n");
    		close(sock);
    		return -1;
    	}
    	
    	if(listen(sock, 10) != 0)
    	{
    		trace("socket listen error !\n");
    		close(sock);
    		return -1;
    	}
    	trace("socket wait connect......\n");
    
    	int recv_len = 0;
    	char buffer[MAX_BUFFER_SIZE] = {0};
    
    	while((sock_connect = accept(sock, NULL, NULL)) != -1)
    	{
    		if((recv_len = recv(sock_connect, buffer, sizeof(buffer), 0)) != -1)
    		{
    			trace("recv buffer success len = %d!\n", recv_len);
    			trace("recv contents:%s\n", buffer);
    
    			if((send(sock_connect, buffer, recv_len, 0)) == -1)
    			{
    				trace("send buffer error !\n");
    			}
    		}
    		
    		close(sock_connect);
    		sock_connect = -1;
    		trace("\nsocket wait connect......\n");
    	}
    
    	return 0;
    }

    运行结果:

    server:./tcpserver 8000

    client:./tcpclient 10.12.2.250 8000 hello

    ***param 1: ./tcpclient
    ***param 2: 10.12.2.250
    ***param 3: 9898
    ***param 4: hello
    connect server success !
    send buffer success !
    recv buffer success len = 6!
    server respond:hello
    close sock success !

    server:

    socket wait connect......
    recv buffer success len = 6!
    recv contents:hello

  • 相关阅读:
    医院产品演变畅想
    2014-1-19
    更新一下blog
    tostring的自动调用
    解决evernote更新报错问题
    健身日记
    跑步计划
    [转载]offsetHeight , clientHeight, scrollHeight 区别
    做一个院友网站杂记
    查好友摇一摇功能的感受
  • 原文地址:https://www.cnblogs.com/yangxx/p/6702004.html
Copyright © 2020-2023  润新知