tcp客户端示例
#include <errno.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdlib.h> #include <string.h> #include <netinet/in.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> typedef struct _NSS_HEADER { unsigned short ProtocolVersion; /* 协议版本信息 */ unsigned short MsgType; /* 消息类型 */ unsigned short TransactionNo; /* 传输编号 */ unsigned short PacketLength; /* 数据包长度,包括Header */ }NSS_HEADER; int str_echo(int sockfd, unsigned short no) { ssize_t readLen; ssize_t writeLen; char buf[8]; NSS_HEADER *hdr = (NSS_HEADER*)buf; memset( hdr, 0, sizeof(NSS_HEADER) ); hdr->TransactionNo = no; // 写数据 int nWriteLen = 0; while ( true ) { writeLen = write(sockfd, &buf[nWriteLen], sizeof(NSS_HEADER)-nWriteLen); // printf( "write %d/n", writeLen); if (writeLen < 0 && errno == EINTR) { continue; } else if ( writeLen < 0 ) { perror ( "write:" ); return -1; } nWriteLen += writeLen; // 已写完,直接返回 if (nWriteLen >= sizeof(NSS_HEADER) ) { break; } } printf( "send data successed. trans no: %d/n", no ); // 读数据 int nReadLen = 8; while ( true ) { readLen = read(sockfd, buf, nReadLen); // printf( "read: %d/n", readLen ); if (readLen < 0 && errno == EINTR) { continue; } else if ( readLen <= 0 ) { perror( "read:"); return -1; } else { nReadLen -= readLen; if (nReadLen <= 0 ) { break; } } } printf( "read response successed./n" ); return 0; } int main(int argc, char **argv) { printf("client ip: %s/n", argv[1]); printf("client port: %s/n", argv[2]); printf("server ip: %s/n", argv[3]); printf("server port: %s/n", argv[4]); printf("/n service starting.../n/n"); while( true ) { int socketFd; struct sockaddr_in svrAddr; struct sockaddr_in localAddr; socketFd = socket (AF_INET, SOCK_STREAM, 0); if ( -1 == socketFd ) { perror( "socket:" ); continue; } // 设置地址可复用 int option = 1; setsockopt( socketFd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option) ); // 客户端IP memset(&localAddr, 0, sizeof(localAddr)); localAddr.sin_family = AF_INET; localAddr.sin_addr.s_addr = inet_addr( argv[1]); localAddr.sin_port = htons (atoi(argv[2])); int bindResult = bind(socketFd, (struct sockaddr *) &localAddr, sizeof(localAddr)); if ( -1 == bindResult ) { perror( "bind:" ); sleep(10); close(socketFd); continue; } // 服务器IP memset(&svrAddr, 0, sizeof(svrAddr)); svrAddr.sin_family = AF_INET; svrAddr.sin_addr.s_addr = inet_addr( argv[3]); svrAddr.sin_port = htons (atoi(argv[4])); // 不断重连 int connResult = connect(socketFd, (struct sockaddr *) &svrAddr, sizeof(svrAddr)); if ( -1 == connResult ) { perror( "connect:" ); sleep(10); close(socketFd); continue; } printf (" connect %s:%s successed./n", argv[3], argv[4] ); static unsigned short no = 0; // 连接成功,每分钟发送一次数据 for ( ; ; ) { if ( -1 == str_echo(socketFd, no++) ) { break; } sleep( 60 ); } close(socketFd); } }
tcp服务器源码示例
#include <errno.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdlib.h> #include <string.h> #include <netinet/in.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> struct _NSS_HEADER { unsigned short ProtocolVersion; /* 协议版本信息 */ unsigned short MsgType; /* 消息类型 */ unsigned short TransactionNo; /* 传输编号 */ unsigned short PacketLength; /* 数据包长度,包括Header */ }NSS_HEADER; void str_echo(int sockfd) { ssize_t readLen; ssize_t writeLen; char buf[8]; while ( true ) { readLen = read(sockfd, buf, 8); if (readLen < 0 && errno == EINTR) { continue; } else if ( readLen <= 0 ) { perror( "read:"); return ; } printf( "recv data successed. data len: %d/n", readLen ); int nWriteLen = 0; while ( true ) { writeLen == write(sockfd, &buf[nWriteLen], readLen-nWriteLen); if (writeLen < 0 && errno == EINTR) { continue; } else if ( writeLen < 0 ) { perror ( "write:" ); return; } nWriteLen += writeLen; // 已写完,直接返回 if (nWriteLen >= readLen ) { break; } } printf( "send data successed. data len: %d/n", readLen ); } } int main(int argc, char **argv) { printf( "server ip: %s/n", argv[1] ); printf( "server port: %s/n", argv[2] ); printf( "/nservice starting ... /n/n" ); int listenfd, connfd; pid_t childpid; socklen_t clilen; struct sockaddr_in cliaddr, servaddr; listenfd = socket (AF_INET, SOCK_STREAM, 0); if ( -1 == listenfd ) { perror( "socket:" ); exit(-1); } // 设置地址可复用 int option = 1; setsockopt( listenfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option) ); memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_addr( argv[1]); servaddr.sin_port = htons (atoi(argv[2])); int bindResult = bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); if ( -1 == bindResult ) { perror( "bind:" ); exit(-1); } int listenResult = listen(listenfd, 5); if ( -1 == listenResult ) { perror( "listen:" ); exit(-1); } for ( ; ; ) { clilen = sizeof(cliaddr); connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &clilen); if ( -1 == connfd ) { perror( "accept:" ); continue; } printf ("accept %s successed.fd: %d/n", inet_ntoa(cliaddr.sin_addr), connfd ); if ( (childpid = fork()) == 0) { /* child process */ close(listenfd); /* close listening socket */ str_echo(connfd); /* process the request */ printf ("disconnect from %d ./n", connfd ); exit (0); } } close(connfd); /* parent closes connected socket */ }
主要内容:本节引言:,1.运行效果图:,2.实现流程图:,3.代码示例:,4.代码下载:,5.本节小结:本节引言: 上节中我们给大家接触了Socket的一些基本概念以及使用方法,然后写了一个小猪简易聊天室的 Demo,相信大家对Socket有了初步的掌握,本节我们来学习下使用Socket来实现大文件的断点续传! 这里讲解的是别人写好的一个Socket上传大文件的例子,不要求我们自己可以写出来,需要的时候会用 就好! 1.运行效果图: 1.先把我们编写好的Socket服务端运行起来: 2.将一个音
主要内容:本节引言:,1.什么是Socket?,2.Socket通信模型:,3.Socket服务端的编写:,4.Socket客户端的编写:,5.增强版案例:小猪简易聊天室,本节小结:本节引言: 上一节的概念课枯燥无味是吧,不过总有点收获是吧,本节开始我们来研究基于TCP协议的Socket 通信,先来了解下Socket的概念,以及Socket通信的模型,实现Socket的步骤,以及作为Socket服务 端与客户端的两位各做要做什么事情!好的,我们由浅入深来扣这个Socket吧! 1.什么是Sock
本文向大家介绍基于Java语言实现Socket通信的实例,包括了基于Java语言实现Socket通信的实例的使用技巧和注意事项,需要的朋友参考一下 基于Java语言实现Socket通信 由于近日项目需求,需要在服务器中增加Socket通信的功能,接收硬件设备发送的心跳包和相关数据,因此又重新对Java的网络编程进行了复习,根据项目的实际情况做了简化的编程,实现了简单的通信过程。 1. Socket
本文向大家介绍Java实现基于TCP的通讯程序实例解析,包括了Java实现基于TCP的通讯程序实例解析的使用技巧和注意事项,需要的朋友参考一下 Java中的TCP通信程序 TCP可以实现两台计算机之间的数据交互通信的两端,要严格区分客户端与服务端 两端通信时的步骤: 1.服务端程序,需要事先启动,等待客户端连接 2.客户端主动连接服务器端,才能成功通信,服务器端不可以主动链接客户端 在java中两
2. 基于TCP协议的网络程序 下图是基于TCP协议的客户端/服务器程序的一般流程: 图 37.2. TCP协议通讯流程 服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()
主要内容:本节引言:,1.服务端实现步骤:,2.客户端实现步骤:,本节小结:本节引言: 本节给大家带来Socket的最后一节:基于UDP协议的Socket通信,在第一节中我们已经详细地 比较了两者的区别,TCP和UDP最大的区别在于是否需要客户端与服务端建立连接后才能进行 数据传输,如果你学了前两节TCP的,传输前先开服务端,accept,等客户端接入,然后获得 客户端socket然后进行IO操作,而UDP则不用,UDP以数据报作为数据的传输载体,在进行传输时 首先要把传
本文向大家介绍python基于socket实现的UDP及TCP通讯功能示例,包括了python基于socket实现的UDP及TCP通讯功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python基于socket实现的UDP及TCP通讯功能。分享给大家供大家参考,具体如下: Server: Client: 运行结果: server [work@db-testing python]$
主要内容:安装C-Free 5.0,运行C语言代码安装C-Free 5.0 C-Free 是一款国产的Windows下的C/ C++ IDE,最新版本是 5.0,整个软件才 14M,非常轻巧,安装简单。 下载地址: C-Free 5.0下载 按照教程中的说明安装并 C-Free 5.0。 需要注意的是:C-Free 5.0 在 XP、Win7 下能够完美运行,在 Win8、Win10 下可能会存在兼容性问题,读者可以先尝试安装,不行的话再使用