とりあえずiOSをTCP SERVERにしたくて次のコードを書きましたが全くアクセス出来ません
なにか許可とかしないとだめなのですか?
またもっといいTCP SERVERのコードを教えてください
そもそもiOSにPINGもできませんがこれが普通なのですか?
getIPAddressの戻り値はただしいようです。
-
(void)viewDidLoad {
[super viewDidLoad];NSString * strip=[self getIPAddress];
self.myip.text=strip;
// Do any additional setup after loading the view, typically from a nib.
int listenfd = 0;
struct sockaddr_in serv_addr;listenfd = socket(AF_INET, SOCK_STREAM, 0);
memset(&serv_addr, '0', sizeof(serv_addr));serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(8080);bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
bool _listenForConnections = true;
listen(listenfd, 10);dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"Waiting for connections...");
while (_listenForConnections)
{
__block int connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);
NSLog(@"Connection accepted");/*char buffer[1024]; bzero(buffer, 1024); NSString *message = @""; bool continueReading = true; do { recv(connfd , buffer , 1024 , 0); int size = strlen(buffer); if ((buffer[size-1] == '}' && buffer[size-2] == '{')) { continueReading = false; buffer[size-2] = '\0'; } message = [NSString stringWithFormat: @"%@%s", message, buffer]; }while (continueReading); NSLog(@"Got message from client"); char* answer = "Hello World"; write(connfd, answer, strlen(answer)); */ } NSLog(@"Stop listening."); close(listenfd);
});
}
-
(NSString *)getIPAddress {
NSString *address = @"error";
struct ifaddrs *interfaces = NULL;
struct ifaddrs *temp_addr = NULL;
int success = 0;
// retrieve the current interfaces - returns 0 on success
success = getifaddrs(&interfaces);
if (success == 0) {
// Loop through linked list of interfaces
temp_addr = interfaces;
while(temp_addr != NULL) {
if(temp_addr->ifa_addr->sa_family == AF_INET) {
// Check if interface is en0 which is the wifi connection on the iPhone
if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
// Get NSString from C String
address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];} } temp_addr = temp_addr->ifa_next; }
}
// Free memory
freeifaddrs(interfaces);
return address;
}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。