共计 2443 个字符,预计需要花费 7 分钟才能阅读完成。
这篇文章给大家介绍如何进行 TCP Socket 中的 linux 实现,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
TCP Server 端:
#include iostream
#include cstring
#include sys/types.h
#include sys/socket.h
#include netinet/in.h
#include errno.h
#define SRVPORT 10005
#define CONNECT_NUM 5
#define MAX_NUM 80
using namespace std;
int main(int argc, char* argv[] )
{
int aSock = -1, srcSock = -1;
int nSrvAddr = -1, cnt = -1;
sockaddr_in sa, serverSockAddr;
sockaddr srvSockAddr;
memset(srvSockAddr, 0, sizeof(srvSockAddr) );
aSock = socket(AF_INET, SOCK_STREAM, 0);
if(aSock 0)
{
cout Create srcSock Error! endl;
return 0;
}
memset(serverSockAddr, 0, sizeof(serverSockAddr) );
memset(sa, 0, sizeof(sa) );
sa.sin_family = AF_INET;
sa.sin_port = htons((u_short)SRVPORT);
sa.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind( aSock, (sockaddr*) sa, sizeof(sa) ) 0 )
{
cout Bind Error! endl;
return 0;
}
if(listen(aSock, CONNECT_NUM) 0 )
{
cout Listen Error! endl;
return 0;
}
cout Server has been opened: endl;
while(true)
{
cnt = -1;
nSrvAddr = sizeof(sockaddr_in);
srcSock = accept(aSock, (sockaddr*) serverSockAddr, (socklen_t *) nSrvAddr );
if(srcSock 0)
{
cout Server accept Error@ endl;
cout srcSock is: srcSock endl;
cout Error No is : errno endl;
perror(server:
return 0;
}
char szRevMeg[MAX_NUM] = {0};
char szSdMeg[MAX_NUM] = {Hello World!};
cout Begin to read: endl;
cnt = read(srcSock, szRevMeg, MAX_NUM);
if(cnt 0)
{
cout Read Error! endl;
return 0; //Just to test
}
cout cnt is: cnt endl;
cout Complete Read: endl;
cout szRevMeg endl;
cnt = write(srcSock, szSdMeg, strlen(szSdMeg)+1 );
if(cnt 0)
{
cout Write Error! endl;
}
cout Write Completed! endl;
close(srcSock);
cout endl;
}
close(aSock);
return 0;
}
TCP Client 端:
#include iostream
#include cstring
#include sys/types.h
#include sys/socket.h
#include netinet/in.h
#include arpa/inet.h
#define PORT 10005
#define SRVIP 127.0.0.1 // 222.26.209.141
#define RCVNUM 1024
using namespace std;
int main()
{
int clientSock, nRecvBytes = -1;
sockaddr_in sa;
char Buffer[RCVNUM] = {0};
clientSock = socket(AF_INET, SOCK_STREAM, 0);
if(clientSock 0)
{
cout Client Socket create error! endl;
return 0;
}
memset(sa, 0, sizeof(sa) );
sa.sin_family = AF_INET;
sa.sin_port = htons(PORT);
sa.sin_addr.s_addr = inet_addr(SRVIP);
if(connect( clientSock, (sockaddr*) sa, sizeof(sockaddr) ) 0 )
{
cout Connect Error! endl;
return 0;
}
cout Client has been opened: endl;
strcpy(Buffer, Here client said: hello);
cout Begin to write: endl;
write(clientSock, Buffer, strlen(Buffer)+1 );
cout Write completed endl;
memset(Buffer, 0, sizeof(Buffer) );
if(nRecvBytes = read( clientSock,Buffer, RCVNUM) 0 )
{
cout Read Message Error! endl;
return 0;
}
cout Server says: Buffer endl;
close(clientSock);
cout End of file endl;
return 0;
}
关于如何进行 TCP Socket 中的 linux 实现就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。