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; }