socket通信

在网络传输协议中,TCP协议提供的是一种可靠的,复杂的,面向连接的数据流(SOCK_STREAM)传输服务,它通过三段式握手过程建立连接。TCP有一种“重传确认”机制,即接收端收到数据后要发出一个肯定确认的信号,发送端如果收到接收端肯定确认的信号,就会继续发送其他的数据,如果没有,它就会重新发送。

相对而言,UDP协议则是一种无连接的,不可靠的数据报(SOCK_DGRAM)传输服务。使用UDP套接口不用建立连接,服务端在调用socket()生成一个套接字并调用bind()绑定端口后就可以进行通信(recvfrom函数和sendto函数)了;客户端在用socket()生成一个套接字后就可以向服务端地址发送和接收数据了。

此处需要特别注意:TCP使用的是流套接字(SOCK_STREAM),UDP使用的是数据报套接字(SOCK_DGRAM)


/* File Name: server.c */  

/*server.c*/
#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  
#include<errno.h>  
#include<sys/types.h>  
#include<sys/socket.h>  
#include<netinet/in.h>  
#define SERV_PORT 8000
int main()
{
     int sockfd,n,servaddr_len;
     char * server_ip = "127.0.0.1";
     char buf[80];   
     struct sockaddr_in server,client;
 
 
     sockfd = socket (AF_INET,SOCK_DGRAM,0);
     //SOCK_DGRAM 使用不连续不可信赖的数据包连接
 
 
     bzero(&server,sizeof(server));
     server.sin_family = AF_INET;
     server.sin_addr.s_addr = inet_addr(server_ip);
     server.sin_port = htons(SERV_PORT);
     servaddr_len = sizeof(server);
 


     bind(sockfd,(struct sockaddr *) &server,servaddr_len);
     listen(sockfd,6);
     while(true) {
        printf("等待读取数据.......\n");
        servaddr_len = sizeof(client);      
        n = read(sockfd,buf,sizeof(buf));
        write(sockfd,buf,n);
        printf("读取的数据为:%s\n",buf);
        bzero(buf,sizeof(buf));
     }                     
     close(sockfd);
     return 0;

}


/* File Name: client.php */
   $server_ip="127.0.0.1";
   $port = 8000;

   $buf=trim($_GET['buf']);
   $sockfd=socket_create(AF_INET,SOCK_DGRAM,SOL_UDP)or die("创建失败");
   socket_connect($sockfd,$server_ip,$port)or die("连接错误");
   socket_write($sockfd,$buf,strlen($buf))or die("写入错误");
   socket_read($sockfd,$buf,80);
   echo $buf;
   $buf="";
   socket_close($sockfd);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值