OpenBSD下Socket网络编程之TCP阻塞型基本实现

OpenBSD的安装、升级、更新等日常问题。

版主: chenjun天地乾坤

回复
none
铁 Fe
帖子: 67
注册时间: 2012-02-29 11:41

OpenBSD下Socket网络编程之TCP阻塞型基本实现

帖子 none » 2012-03-18 23:19

为方便在各平台下改动小,采取最通用的函数实现,不考虑效率,只求结构框架清晰,避免日后遗忘。
完整例子代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#define SERVER_LISTEN_PORT 3721
int main(int argc, char *argv[])
{
printf("TCP server started!\n");
int socketListen, socketClient;
int saLength, err;
char *strClientIp;
struct sockaddr_in saServer;
struct sockaddr_in saClient;
saLength = sizeof(struct sockaddr);
socketListen = socket(AF_INET, SOCK_STREAM, 0);
if (socketListen == -1)
{
printf("socket() : Server listen socket create error.\n");
return -1;
}
(void)memset(&saServer, 0, saLength);
saServer.sin_family = AF_INET;
saServer.sin_port = htons(SERVER_LISTEN_PORT);
saServer.sin_addr.s_addr = htonl(INADDR_ANY);//默认监听本机所有地址
//saServer.sin_addr.s_addr = inet_addr("127.0.0.1");//或者监听某IP地址
err = bind(socketListen, (struct sockaddr *)(&saServer), saLength);
if (err == -1)
{
printf("bind() : Bind the server socket error.\n");
return -1;
}
err = listen(socketListen, 4096);
if (err == -1)
{
printf("listen() : Server socket listen error.\n");
return -1;
}
for ( ;; )
{
saLength = sizeof(struct sockaddr_in);
socketClient = accept(socketListen, (struct sockaddr *)&saClient, &saLength);
if (socketClient == -1)
{
printf("accept() : accept the client socket error.\n");
continue;
}
//已经有客户连接上来了,下面可以对客户套接字进行recv和send或read和write,进行各种业务逻辑实现了。
strClientIp = inet_ntoa(saClient.sin_addr);
printf("accept the connection from remote client %s.\n", strClientIp);
err = send(socketClient, "welcome connect the net server.", strlen("welcome connect the net server."), 0);
if (err == -1)
{
printf("send() : Send data to client socket error.\n");
close(socketClient);
exit(0);
}
close(socketClient);
}
close(socketListen);
return 0;
}
客户端程序暂时不写,可以用telnet来测试,如:
telnet 127.0.0.1 3721

none
铁 Fe
帖子: 67
注册时间: 2012-02-29 11:41

回复: OpenBSD下Socket网络编程之TCP阻塞型基本实现

帖子 none » 2012-03-18 23:22

贴上来不会搞缩进。。。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD下Socket网络编程之TCP阻塞型基本实现

帖子 leo » 2012-04-01 2:23

不用搞缩进,那多累? 最简单的方式是编辑帖子时先进入高级模式,然后点击上面的“#”图标,这个就是用来贴代码的。
详这里:
http://www.gobsd.org/misc.php?do=bbcode
附件
bbcode.jpg

回复

在线用户

正浏览此版面之用户: 没有注册用户 和 1 访客