Linux下基于C++的TCP连接demo代码分享(C++,Linux,Socket)

#C++实现TCP连接

@(C++代码)[网络编程, tcp, C++, C++实现]

server.cpp:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <unistd.h>

#include <arpa/inet.h>

#define PORT 8888

void process_conn_client(int s)

{

ssize_t size = 0;

char buffer[1024];

while(1)

{

size = read(0, buffer, 1024);

if(size > 0)

{

write(s, buffer, size);

size = read(s, buffer, 1024);

write(1, buffer, size);

}

}

}

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

{

int s;

struct sockaddr_in server_addr;

s = socket(AF_INET, SOCK_STREAM, 0);

if(s < 0)

{

printf("socket error\n");

return -1;

}

bzero(&server_addr,sizeof(server_addr));

server_addr.sin_family = AF_INET;

server_addr.sin_addr.s_addr = htonl(INADDR_ANY);

server_addr.sin_port = htons(PORT);

inet_pton(AF_INET, argv[1], &server_addr.sin_addr);

connect(s, (struct sockaddr*)&server_addr, sizeof(struct sockaddr));

process_conn_client(s);

close(s);

return 0;

}


client:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <arpa/inet.h>

#include <unistd.h>

#define PORT 8888

#define BACKLOG 2

void process_conn_server(int s)

{

ssize_t size = 0;

char buffer[1024];

while(1)

{

size = read(s, buffer,1024);

if(size == 0) return;

sprintf(buffer, "%d bytes altogether\n",size);

write(s, buffer, strlen(buffer)+1);

}

}

int main()

{

int ss,sc; //socket server,socket client

struct sockaddr_in server_addr;

struct sockaddr_in client_addr;

int err;

pid_t pid;

//create AF_INET socket

ss = socket(AF_INET, SOCK_STREAM, 0);

if(ss<0)

{

printf("socket error\n");

return -1;

}

//set server address

bzero(&server_addr,sizeof(server_addr));

server_addr.sin_family = AF_INET;

server_addr.sin_addr.s_addr = htonl(INADDR_ANY);

server_addr.sin_port = htons(PORT);

err = bind(ss, (struct sockaddr*)&server_addr , sizeof(server_addr) );

if(err < 0)

{

printf("bind error\n");

return -1;

}

err = listen(ss,BACKLOG);

if(err < 0)

{

printf("listen error\n");

return -1;

}

while(1)

{

socklen_t addrlen = sizeof(struct sockaddr);

sc = accept(ss, (struct sockaddr*)&client_addr, &addrlen);

if(sc < 0)

{

continue;

}

pid = fork();

if(pid == 0)

{

close(ss);

process_conn_server(sc);

}

else

{

close(sc);

}

}

}


makefile:

all:client server

client:tcp_client.o

gcc -o client tcp_client.o

server:tcp_server.o

gcc -o server tcp_server.o

clean:

rm -f client server *.o

免费C/C++基础丶进阶资料,还有实践课程免费领,加群728483370

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 下面为Daytime这个服务的源代码例子,同时兼容IPV6和IPV4的地址,最后部分有更多说明。 单播模式下的Se...
    天楚锐齿阅读 5,817评论 0 2
  • 大纲 一.Socket简介 二.BSD Socket编程准备 1.地址 2.端口 3.网络字节序 4.半相关与全相...
    VD2012阅读 2,470评论 0 5
  • 一、概述 TCP(传输控制协议)和UDP(用户数据报协议)是网络体系结构TCP/IP模型中传输层一层中的两个不同的...
    小叶大孟阅读 712评论 0 1
  • 一、基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的。网络的socket数据传输...
    WB莫遥燚阅读 1,505评论 0 0
  • 大纲 一.Socket简介 二.BSD Socket编程准备 1.地址 2.端口 3.网络字节序 4.半相关与全相...
    y角阅读 2,593评论 2 11