tcp客户端示例

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

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

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

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 */

}

c语言tcp硬时事通讯程序代码,使用C语言编写基于TCP协议的Socket通讯程序实例分享...相关推荐

  1. java xmpp协议_GitHub - zhengzhi530/xmpp: 基于Xmpp协议的即时通讯社交软件(客户端+服务端)...

    yyquan 开源一个自己去年写的基于Xmpp协议的即时通讯社交软件 (客户端+服务端) 本项目仅供参考,对于正在学习Xmpp以及javaweb后台的同学,可以看一下. 做这个项目纯属个人兴趣爱好,所 ...

  2. 基于SMTP协议的电子邮件客户端程序

    基于SMTP协议的电子邮件客户端程序 电子邮件的完整传输过程: ​ 发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA ...

  3. 物联网LoRa系列-11:LoRa终端--基于物理层协议的PingPong应用程序的软件架构

    至此,我们已经搭建好LoRa终端的软硬件开发环境,接下来,将解构和实现LoRa终端的应用程序. LoRa终端的应用程序,(1)可以直接基于LoRa的物理层协议(LoRa芯片实现):(2)也可以基于Lo ...

  4. Android端与服务端基于TCP/IP协议的Socket通讯

    什么是TCP/IP协议? 百度百科的解释:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议, ...

  5. 学会c语言能开发软件吗,学编程什么时候能够编写像酷狗音乐一样的程序?

    这个问题是很多新手都想知道的.因为刚开始学习编程的时候,都是从C语言开始的.C语言是所有编程语言的基础,只要你学会了C语言,其它语言学起来就会特别轻松.有疑问的读者可以参考这篇文章:浅谈编程:初学者如 ...

  6. c语言程序 用追赶法求解方程组,编写用追赶法解三对角线性方程组的程序,并解下列方程组(3页)-原创力文档...

    计算方法与实习上机实验(二) 实验名称: 编写用追赶法解三对角线性方程组的程序,并解下列方程组: (1) (2)Ax=b,其中 A10×10=, b10×1= 程序代码: #include using ...

  7. c语言程序 用追赶法求解方程组,编写用追赶法解三对角线性方程组的程序,并解下列方程组...

    计算方法与实习上机实验(二) 实验名称: 编写用追赶法解三对角线性方程组的程序,并解下列方程组: 2x1 x2 5, x 2x x 12, 123(1) x 2x x 11,34 2 x3 2x4 1 ...

  8. 基于websocket协议的即时通讯webapp(摘自本人毕业论文)

    即时通讯实现 功能结构图 Spring WebSocket配置 本软件的即时通讯技术采用了WebSocket协议,因为从spring4.0的版本才开始支持WebSocket,所以本软件服务端的spri ...

  9. 网络编程应用:基于UDP协议【实现聊天程序】--练习

    要求: 使用UDP协议实现一个聊天程序 代码: 发送端: package UDP聊天程序;import java.io.IOException; import java.net.DatagramPac ...

  10. 基于SIP协议的视频通讯

    1.sip协议及其发展 sip(session initiation protocal)称为会话发起协议,是由ietf(internet engineering task force)组织于1999年 ...

最新文章

  1. 传统的http请求存在那些缺点
  2. 【架构零】大型网站的架构的目标与挑战
  3. java画虚线_java cansvas 画虚线要怎么设置?
  4. 2017 实习面试问题总结(阿里、头条、美团、cvte、乐视、华为)
  5. android Bundle的作用
  6. 使用 RxJava 的正确姿势
  7. ftp服务器通信协议设计,基于FTP协议的文件传输服务器的研究
  8. 解决linux 运行自动化脚本浏览器无法启动问题
  9. 光环PMP 疑难点辨析
  10. 阿里云对象存储OSS有什么功能?
  11. JAVA实现战舰游戏
  12. 【操作系统】第十一章-多媒体操作系统
  13. C#人民币金额大写转换
  14. 赵小楼《天道》《遥远的救世主》深度解析(51)为什么芮小丹用脱衣这个方式来告白丁元英?
  15. 蘑菇街iOS客户端应用源码
  16. 华为服务器恢复远程连接的出厂用户名和密码
  17. kaggle 深度学习训练内存不够
  18. android加载GIF动画
  19. Apache Doris 0.11.x 版本升级
  20. 间歇性断食是什么 间歇性断食法怎样吃

热门文章

  1. (03) spring Boot 的配置
  2. Beta冲刺 day1
  3. BZOJ1575: [Usaco2009 Jan]气象牛Baric
  4. python--函数
  5. hdu 1520 没有上司的晚会
  6. 关于apache camel的消息转发效率
  7. 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
  8. AutoHotKey Script AHK脚本++Topre Realforce 104Pro十周年纪念版静电容键盘
  9. ASP.net实现邮件发送
  10. 将URL中的参数提取出来作为对象