linux网络编程笔记——TCP
2014-05-19 10:58
369 查看
1、TCP和UDP
TCP是长连接像持续的打电话,UDP是短消息更像是发短信。TCP需要消耗相对较多的资源,但是传输质量有保障,UDP本身是不会考虑传输质量的问题。2、网络传输内容
我习惯的做法是直接通过TCP传送结构体,当然前提是收发两端都在程序里对目标结构体有充分的定义。特别说明的一点是,要小心收发两端处理器的大小端问题!而且传输信息头里必须包含长度信息,而且通用的是大端。但是,这里的长度和结构体,我选择用小端进行传输。3、TCPserver实现
参考了别人多线程的回调写法,看起来不错。tcputil.c(照搬别人的,文件内有作者信息)
#include "tcputil.h" int main(int argc, const char *argv[]) { struct sockaddr_in addr; int sock; diff_t *diff=malloc(sizeof(diff_t)); bzero(diff,sizeof(diff_t)); if(argc != 2) { fprintf(stderr,"need an IP address\n"); return 1; } memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; inet_aton(argv[1],&addr.sin_addr); addr.sin_port = htons(PORT); if( (sock = socket(PF_INET, SOCK_STREAM,0)) < 0 ) { perror("socket"); } if( connect(sock, (struct sockaddr *)&addr, sizeof(addr)) ) { perror("connect"); } printf("Connected!\n"); printf("I am station!\n"); printf("Connected to %s:%d\n", inet_ntoa(addr.sin_addr),ntohs(addr.sin_port)); char tag[]="\nstation\n"; uint32_t len = strlen(tag)+sizeof(diff_t); int msg_len = 4+strlen(tag)+sizeof(diff_t); char *msg=malloc(msg_len); bzero(msg,msg_len); memcpy(msg,&len,4); memcpy(msg+4,tag,strlen(tag)); while(1){ memcpy(msg+4+strlen(tag),diff,sizeof(diff_t)); printf("!!!!!!!!!!!!%d\n", msg_len); if(write(sock,msg,msg_len) != msg_len) { perror("write"); } sleep(1); } free(msg); close(sock); return 0; }
View Code
附上makefile一枚
all: rover server station rover: rover.c tcputil.o gcc rover.c tcputil.o -o rover -lpthread server: server.c tcputil.o gcc server.c tcputil.o -o server -lpthread station:station.c tcputil.o gcc station.c tcputil.o -o station -lpthread tcputil:tcputil.c gcc tcputil.c -c -lpthread .PHONY: clean clean: rm -f *.o rover server station
相关文章推荐
- Linux网络编程-TCP(留个笔记,以后方便查阅)
- Linux网络编程学习笔记-TCP/IP基础-1
- Tcp通信 暑期学习笔记(二)
- TCP-IP学习笔记_卷1_第12章_多播和广播
- TCP连接关闭过程笔记
- TCP/IP 笔记 之 链路层
- TCP 学习笔记 --阿太
- TCP/IP 笔记之 IP协议
- TCP/IP 常用端口笔记
- 孙鑫VC视频教程笔记之第十四课“基于TCP和UDP的Socket编程”
- TCP/IP 笔记 之 概述
- TCP_IP协议详解学习笔记_卷1_第17-18章_TCP协议
- Java 网络编程 TCP vs UDP -Java学习笔记(31)
- TCP/IP学习笔记之六 --- ICMP: Internet控制报文协议
- WCF 学习笔记(三)----构建双向通讯(tcp/http)
- 计算机网络笔记第二章 应用层tcpip primer plus 第十五章
- TCP_IP协议详解学习笔记_卷1_第12章_多播和广播
- Linux网络编程笔记(修订版)
- 在Debian 4.0rc3上编译内核2.6.24时加入Layer7模块笔记[防火墙中在TCP/IP第七层Layer7应用层阻挡QQ,MSN等软件的应用]
- TCP/IP学习笔记之十 --- IGMP:Internet组管理协议