套接字编程

/*
socket:
#include <sys/types.h>
#include <sys/socket.h>

int socket(int domain,int type,int protocol);//领域,类型,协议

#pragma pack(1)
*/


#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int main()
{
     int sock_listen=socket(AF_INET, SOCK_STREAM, 0);

     //sock_listen用于存放新创建的套接字的描述符

     /*
     AF_INET: 使用Internet地址家族,即采用TCP/IP协议族标准,几乎是固定的
     SOCK_STREAM: 表示创建的是流套接字
     0: 表示使用默认的协议编号,即TCP协议对应的编号
     */

     //1024以下的端口号称为熟知端口号,它们被很多常用的软件所使用,比如Web服务器通常都使用80号端口,FTP服务器通常使用20和21号端口,所以我们的程序建议不要使用1024以下的端口号,以免和它们冲突

     struct sockaddr_in myaddr;
     myaddr.sin_family=AF_INET; //指定地址家族为Internet地址家族
     myaddr.sin_addr.s_addr=INADDR_ANY; //指定IP地址为本机任意IP
     myaddr.sin_port=htons(55555); //指定端口号为55555
     //printf("%d\n",htons(55555));
     //htons:将一个短整型的数据从主机字节序转换为网络字节序

     //没有绑定的套接字称为野套接字,即Floating Socket
     if(-1==bind(sock_listen, (struct sockaddr*)&myaddr, sizeof(myaddr)))
     {
          perror("绑定失败");
          return 1;
     }


     listen(sock_listen, 5); //将sock_listen这个套接字设置为监听状态
     //5表示监听等待队列的长度为5

     //accept函数:接收一个客户端连接请求,即建立了一个连接,返回值为这个连接对应的套接字描述符,这个套接字是专门用来在这条连接通道上进行通信的,称为连接套接字。如果调用accept时没有连接请求到来,该函数会阻塞当前线程的执行

     int sock_conn=accept(sock_listen, NULL, NULL);


     char msg[1000]="hello,guy!";
     send(sock_conn, msg, strlen(msg),0); //通过sock_conn连接套接字将msg发送给客户端,0表示默认的发送行为


     //recv返回值为实际成功接收的字节数
     int ret=recv(sock_conn,msg,sizeof(msg)-1,0); //0表示默认的接收行为
     msg[ret]='\0';
     printf("客户端说:%s\n", msg);


     close(sock_conn); //通信完毕后关闭连接套接字,即断开和客户端的连接

     close(sock_listen); //如果不希望再接收其他客户端的连接请求,可以关闭监听套接字

     return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐的提千万

江山父老能容我,不使人间造孽钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值