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

UNIX socket 编程

2010-07-25 12:08 162 查看
客户端像服务器端发送数据:

服务器:192.168.1.101:1234 本地端口4444(本地地址可不设置,端口由系统自动设置)

#include <QtCore/QCoreApplication>
#include <QDebug>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int skt = socket(AF_INET, SOCK_STREAM, 0);
// local address (optional)
sockaddr_in localaddr;
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(4444);
localaddr.sin_addr.s_addr = INADDR_ANY;
memset(localaddr.sin_zero, 0, sizeof(localaddr.sin_zero));
bind(skt, (sockaddr *)&localaddr, sizeof(localaddr));
// remote(server) address
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(1234);
char ipAddr[] = "192.168.1.101";
inet_pton(AF_INET,ipAddr ,&addr.sin_addr);
memset(addr.sin_zero, 0, sizeof(addr.sin_zero));
int r = connect(skt, (sockaddr *)&addr, sizeof(addr));
qDebug() << r;
char data[] = "hello world!";
send(skt, data, sizeof(data), MSG_CONFIRM);
return a.exec();
}


作为服务器端:

端口地址1234

#include <QtCore/QCoreApplication>
#include <QDebug>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/wait.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int skt = socket(AF_INET, SOCK_STREAM, 0);
// local address(server port)
sockaddr_in localaddr;
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(1234);
localaddr.sin_addr.s_addr = INADDR_ANY;
memset(localaddr.sin_zero, 0, sizeof(localaddr.sin_zero));
bind(skt, (sockaddr *)&localaddr, sizeof(localaddr));
//
qDebug() << "bind" << listen(skt,100);
while(true)
{
sockaddr_in clientaddr;
unsigned addrlen;
int client = accept(skt, (sockaddr*)&clientaddr, &addrlen);
qDebug() << "accept:" << client;
int pid = fork();
if(pid < 0)
{
qDebug() << "child process error.";
}
else if(pid == 0)
{
// child process
char buffer[100];
int dataLen = recv(client, buffer, sizeof(buffer), MSG_WAITALL);
qDebug() << "data length:" << dataLen;
for(int i = 0; i < dataLen; i++)
{
qDebug() << buffer[i];
}
close(client);
}
else
{
close(client);
int status;
waitpid(pid, &status, 0);
}
}
return a.exec();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: