iOS socket 套接字编程

服务端:

#import "ViewController.h"

#import <sys/socket.h>
#import <netdb.h>

@interface ViewController ()

@end


#define SOCKET int
#define INVALID_SOCKET -1
#define SOCKET_ERROR -1

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    SOCKET Socket_Client;
    
    //创建 socket
    Socket_Client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (Socket_Client == INVALID_SOCKET)
    {
        printf("socket error");
        return;
    }
    
    struct sockaddr_in sockaddr;
    
    //初始化地址信息
    sockaddr.sin_family = AF_INET;
    sockaddr.sin_port = htons(8000); //8000端口
    sockaddr.sin_addr.s_addr = INADDR_ANY; //表示所有可用的地址
    
    //绑定 socket
    if (bind(Socket_Client,(struct sockaddr*)&sockaddr,sizeof(sockaddr)) == SOCKET_ERROR)
    {
        printf("bind error");
        return;
    }
    
    //监听
    if (listen(Socket_Client,5) == SOCKET_ERROR)
    {
        printf("listen error");
        return;
    }
    
    SOCKET Socket_Server; //客户端
    struct sockaddr_in remoteAddr; //服务端地址
    int Addrlen = sizeof(remoteAddr);
    char revData[255];
    
    while (true)
    {
        //接收连接
        Socket_Server = accept(Socket_Client,(struct sockaddr*)&remoteAddr,&Addrlen);
        if (Socket_Client == INVALID_SOCKET)
        {
            printf("accept error");
            continue;
        }
        printf("连接成功");
        
        //接收数据
        int ret = recv(Socket_Server,revData,sizeof(revData),0);
        if (ret > 0)
        {
            printf("recv: %s",revData);
        }
        
    }
    
    close(Socket_Server);  //关闭socket
}

客户端:

#import "ViewController.h"

#import <sys/socket.h>
#import <netdb.h>
#import <arpa/inet.h>

#define SOCKET int
#define INVALID_SOCKET -1

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //创建Socket
    SOCKET Socket_Server;
    Socket_Server = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if (Socket_Server == INVALID_SOCKET)
    {
        printf("Socket error");
        return;
    }
    
    //初始化地址
    struct sockaddr_in ClientAddr;
    ClientAddr.sin_family = AF_INET;
    ClientAddr.sin_port = htons(8000);
    ClientAddr.sin_addr.s_addr = inet_addr("192.168.4.107");
    
    //循环连接
    while (true)
    {
        //连接
        if (connect(Socket_Server,(struct sockaddr*)&ClientAddr,sizeof(ClientAddr)) < 0)
        {
            printf("connect error\n");
            sleep(3);
            continue;
        }
        printf("连接成功");
        break;
    }
    
    //发送
    if (send(Socket_Server,"上线了",sizeof("上线了"),0) < 0)
    {
        printf("send error");
        return;
    }
    
    //关闭Socket
    close(Socket_Server);
    
    // Do any additional setup after loading the view, typically from a nib.
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值