socket TCP簡單通信

socket 服務器服務器

//
//  main.m
//  socket_server
//
//  Created by lujunjie on 2016/11/23.
//  Copyright © 2016年 lujunjie. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <sys/socket.h>
#import <netinet/in.h>
#import <arpa/inet.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
        // 第一步:打開套節字描述
        int sockfd = -1;
        sockfd =  socket(AF_INET, SOCK_STREAM, 0);// 協議族、套節字可靠性傳輸、0
        if(sockfd == -1)
        {
            NSLog(@"error:打開套節字描述符失敗socket()");
            return 0;
        }
        NSLog(@"打開套節字描述sockfd:%d",sockfd);
        
        // 第二步:bind 綁定sockfd和當前電腦的ip地址&端口號
        struct sockaddr_in serveraddr;
        serveraddr.sin_family = AF_INET;
        serveraddr.sin_port = htons(30000); // 5000~655355
        serveraddr.sin_addr.s_addr = inet_addr("192.168.1.103");
        int ret =bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
        if (ret < 0) {
             NSLog(@"error:bind");
            return 0;
        }
        NSLog(@"bind-ret:%d",ret);
        
        // 第三步:listen監聽端口
        int listenRet = listen(sockfd, 10);// ..,監聽多少個;
        if (listenRet < 0) {
            NSLog(@"error:listen");
            return 0;
        }
        NSLog(@"listen-ret:%d",listenRet);
        
        // 第四步:accept阻塞等待客戶端接入
        struct sockaddr_in clientaddr;
        socklen_t len = 0;
        int clientfd = accept(sockfd, (struct sockaddr *)&clientaddr, &len);
        if (clientfd < 0) {
            NSLog(@"error:accept");
            return 0;
        }
        NSLog(@"accept-clientfd:%d",clientfd);
        NSLog(@"成功創建鏈接");
        
        // 創建鏈接以後通訊
        char recvbuf[100];
        memset(recvbuf, 0, sizeof(recvbuf));
//        
//        long recvRet = recv(clientfd, recvbuf, sizeof(recvbuf), 0);
//        
//        NSLog(@"成功接收了%ld個字節\n",recvRet);
//        NSLog(@"client發送過來的內容是:%s",recvbuf);
//        printf("client發送過來的內容是:%s",recvbuf);
        
        while (1) {
            long recvRet = recv(clientfd, recvbuf, sizeof(recvbuf), 0);
            NSLog(@"成功接收了%ld個字節\n",recvRet);
            NSLog(@"NSLogclient發送過來的內容是:%s",recvbuf);
            memset(recvbuf, 0, sizeof(recvbuf));
        }
        
    }
    return 0;
}

socket客戶端socket

//
//  main.m
//  socket_client_Command
//
//  Created by lujunjie on 2016/11/23.
//  Copyright © 2016年 lujunjie. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <sys/socket.h>
#import <netinet/in.h>
#import <arpa/inet.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"socket_client_Command");
        
        // 第一步:打開套節字描述
        int sockfd = -1;
        sockfd =  socket(AF_INET, SOCK_STREAM, 0);// 協議族、套節字可靠性、0
        if(sockfd == -1)
        {
            NSLog(@"error:打開套節字描述符失敗socket()");
            return 0;
        }
        NSLog(@"打開套節字描述sockfd:%d",sockfd);
        
        // 第二步:connect 連接服務器
        struct sockaddr_in serveraddr;
        serveraddr.sin_family = AF_INET;
        serveraddr.sin_port = htons(30000); // 5000~655355
        serveraddr.sin_addr.s_addr = inet_addr("192.168.1.103");
        int ret = connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
        if (ret < 0) {
            NSLog(@"error:connect");
            return 0;
        }
        NSLog(@"connect-ret:%d",ret);
        NSLog(@"成功創建鏈接");
        
        char sendbuf[100];
//        
//        strcpy(sendbuf, "cliend:hello world");
//        long retstr=send(sockfd, sendbuf,strlen(sendbuf),0);
//        
//        NSLog(@"發送了%ld個字符\n",retstr);
        
        while (1) {
            NSLog(@"請輸入要發送的內容\n");
            scanf("%s",sendbuf);
            long retstr=send(sockfd, sendbuf,strlen(sendbuf),0);
            NSLog(@"發送了%ld個字符\n",retstr);
            
        }
        
        
        
    }
    return 0;
}

相關文章
相關標籤/搜索