您的位置:首页 > 编程语言 > C语言/C++

socket编程之C语言一个简单监听程序

2016-01-29 10:27 676 查看
坚持 成长 每日一篇

一下是一个监听指定IP和端口号的服务端程序,只接收一次请求然后退出程序,程序环境是Mac环境,其他环境可以去掉NSlog

#import <Foundation/Foundation.h>
#import <sys/socket.h>
#import <netinet/in.h>
#import <stdint.h>
#import <arpa/inet.h>
#import <sys/types.h>
#import <sys/uio.h>
#import <unistd.h>

int fun()
{
uint16_t a = 0x0102;
uint8_t *p = (uint8_t *)&a;

return (*p == 0x01);
}

int main(int argc, const char * argv[])
{

NSLog(@"fun() = %d", fun());
int socketfd = -1;
int connectSocketfd = -1;
ssize_t ret = -1;

struct sockaddr_in serverAddr;
struct sockaddr_in clientAddr;
socklen_t clientAddrLen;
char    recvBuf[100];
//设置网络的类型使用的是IPV4
serverAddr.sin_family = PF_INET;
//设置监听接口
serverAddr.sin_port = htons(2048) ;
//绑定监听IP
inet_pton(PF_INET, "10.100.50.61", &(serverAddr.sin_addr.s_addr));

//创建Socket设置socket类型为字节流
socketfd = socket(PF_INET, SOCK_STREAM, 0);
if (socketfd < 0)
{
perror("socket err");
return 0;
}
NSLog(@"socketfd = %d", socketfd);

//绑定socket到相应的IP和端口
ret = bind(socketfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr));
if (ret < 0)
{
perror("bind err");
close(socketfd);
return 0;
}
NSLog(@"listen 11");

//监听socket
ret = listen(socketfd, 5);
if (ret < 0)
{
perror("listen err");
close(socketfd);
return 0;
}
NSLog(@"listen 22");
NSLog(@"accept 11");
clientAddrLen = sizeof(clientAddr);
//此处程序会堵塞,等待客户端链接socket
connectSocketfd = accept(socketfd, (struct sockaddr *)&clientAddr, &clientAddrLen);
if (connectSocketfd < 0)
{
perror("accept err");
close(socketfd);
return 0;
}
NSLog(@"accept connectSocketfd = %d", connectSocketfd);

ret = read(connectSocketfd, (void *)recvBuf, sizeof(recvBuf));
if (ret < 0)
{
perror("read err");
close(connectSocketfd);
close(socketfd);
return 0;
}
NSLog(@"read ret = %ld recvBuf = %s", ret, recvBuf);
close(connectSocketfd);
NSLog(@"close(connectSocketfd);");

close(socketfd);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: