TCP通信


TCP服务器的模型                
        1>建立socket连接(产生socket套接字) 

       

头文件:    #include <sys/types.h>       
           #include <sys/socket.h>

函数:    int socket(int domain, int type, int protocol);
					功能:
							建立socket连接
							
					参数:
							domain:协议
					AF_UNIX, AF_LOCAL   Local communication              unix(7)		地址族
					本地连接协议 	域通信
					AF_INET             IPv4 Internet protocols          ip(7)
					IPv4协议
					AF_INET6            IPv6 Internet protocols          ipv6(7)
					IPv6协议

							type:类型
								SOCK_STREAM:流式套接字 			(TCP)
								SOCK_DGRAM:数据报文套接字		(UDP)
								SOCK_RAW:原始套接字


							protocol:0,前面的配置可用
							
							
					返回值:
							成功返回套接字文件描述符
							失败返回-1,并返回错误码


使用:int sockfd = socket(AF_INET,SOCK_STREAM,0);

      
        2>绑定IP和端口号   

        

头文件:    #include <sys/types.h>         
           #include <sys/socket.h>
			
  函数      int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

            功能:
						绑定IP和端口号
						
				参数:
						sockfd:socket返回的文件描述符
						addr:sockaddr *addr
						addrlen:addr的长度
						
				返回值:
						成功返回0
						失败返回-1,并返回错误码



使用:

    struct sockaddr_in server;
    server.sin_fimaly = AF_INET;-----IPv4
    server.sin_port = htons(12345);------端口号,在范围内自己
    server.sin_addr.s_addr = inet_addr("192.168.50.120");----服务器的IP
    bind(sockfd,(struct sockaddr *)&server,sizeof(server));

                    
        3>监听      

       

        #include <sys/types.h>          
        #include <sys/socket.h>
                        int listen(int sockfd, int backlog);
                        功能:
                                监听,将主动连接变成被动连接
                        参数:
                                sockfd:socket返回的文件描述符
                                backlog:同一瞬间允许同时连接的客户端数量
                        返回值:
                                成功返回0
                                失败返回-1,并返回错误码     

    使用:
          listen(sockfd,30);  

                        
        4>等待连接 

        

        #include <sys/types.h>         
		#include <sys/socket.h>
					
        int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
					功能:
							阻塞等待客户端连接
							
					参数:
							sockfd:socket返回的文件描述符
							addr:struct sockaddr * -->用来保存客户端的IP和端口
							addrlen:addr的长度
							
					返回值:
							成功返回非负的文件描述符
							失败返回-1,并返回错误码

        使用;
            struct sockaddr_in client;
            client.sin_fimaly = AF_INET;-----IPv4
            client.sin_port = htons(12345);------端口号,在范围内自己
            client.sin_addr.s_addr = inet_addr("192.168.50.120");----服务器的IP
            int len = sizeof(client);
            int fd = accept(sockfd,(struct sockaddr *)&client,len);

                              
        5>接收recv

char buf[128];
int ret;
while(1){

    bzero(buf,sizeof(buf));
    
    ret = recv(fd,buf,sizeof(buf),0);

    if(ret > 0){

           printf("buf:%s",buf);
    }


}


        线程:发送send

        

pthread_t thread;

pthread_create(&thread,NULL,func,&fd);


void *func(void *arg){

    int fd = *(int *)arg;
    char buf[128];
    while(1){

        bzero(buf,sizeof(buf));
        fgets(buf,stdin);
        send(fd,buf,sizeof(buf),0);
        
    }
       
}

TCP客户端的模型                            
        1>建立socket连接(产生socket套接字)   

           

头文件:    #include <sys/types.h>       
           #include <sys/socket.h>

函数:    int socket(int domain, int type, int protocol);
					功能:
							建立socket连接
							
					参数:
							domain:协议
					AF_UNIX, AF_LOCAL   Local communication              unix(7)		地址族
					本地连接协议 	域通信
					AF_INET             IPv4 Internet protocols          ip(7)
					IPv4协议
					AF_INET6            IPv6 Internet protocols          ipv6(7)
					IPv6协议

							type:类型
								SOCK_STREAM:流式套接字 			(TCP)
								SOCK_DGRAM:数据报文套接字		(UDP)
								SOCK_RAW:原始套接字


							protocol:0,前面的配置可用
							
							
					返回值:
							成功返回套接字文件描述符
							失败返回-1,并返回错误码


使用:int sockfd = socket(AF_INET,SOCK_STREAM,0);

        2>写入IP和端口号 

                   

    struct sockaddr_in server;
    server.sin_fimaly = AF_INET;-----IPv4
    server.sin_port = htons(12345);------端口号,在范围内自己
    server.sin_addr.s_addr = inet_addr("192.168.50.120");----服务器的IP
    bind(sockfd,(struct sockaddr *)&server,sizeof(server));

         
        3>连接 

                          

        #include <sys/types.h>        
		#include <sys/socket.h>
				
        int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
				功能:
						连接服务器
				参数:
						sockfd:socket返回的文件描述符
						sockaddr *addr:保存服务器的IP和端口号
						addrlen:addr的长度
				返回值:
						成功返回0
	
					失败返回-1,并返回错误码


        使用;
        
        connect(sockfd,(struct sockaddr *)&server,sizeof(server));

              
        4>发送send

        

	#include <sys/types.h>
						#include <sys/socket.h>
					ssize_t send(int sockfd, const void *buf, size_t len, int flags);
					功能:
							发送数据
							
					参数:
								sockfd:socket返回的文件描述符
								buf:数据存放的地方
								len:buf的长度
								flags: 0 
								
					返回值:
							成功返回发送的字节数
							失败返回-1,并返回错误码




使用:


    char buf[128];

    while(1){

        bzero(buf,sizeof(buf));
        fgets(buf,stdin);
        send(sockfd,buf,sizeof(buf),0);
    }


        线程:接收recv

        

pthread_t thread;

pthread_create(&thread,NULL,func,&sokfd);


void *func(void *arg){

    int sockfd = *(int *)arg;
    char buf[128];
    while(1){

        bzero(buf,sizeof(buf));
        
        recv(sockfd,buf,sizeof(buf),0);
        
    }
       
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值