socket通信的基本流程
2015-10-29 20:44
696 查看
写在前面:
本博客内容主要为socket通信的C语言实现,与TCP-IP分类下的文章为对应互补内容。
由于理论知识已在对应内容中有所介绍,因此本博客中主要是代码实现:
本博客内容主要为socket通信的C语言实现,与TCP-IP分类下的文章为对应互补内容。
由于理论知识已在对应内容中有所介绍,因此本博客中主要是代码实现:
1.面向连接的服务器:
#include <winsock.h> #pragma comment(lib,"wsock32.lib") int main(int argc, char* argv[]) { SOCKET s,newsock; sockaddr_in ser_addr; sockaddr_in remote_addr; int len; char buf[128]; WSAData wsa; WSAStartup(0x101,&wsa); s = socket(AF_INET,SOCK_STREAM,0); ser_addr.sin_family = AF_INET; ser_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); ser_addr.sin_port = htons(0x1234); bind(s,(sockaddr*)&ser_addr,sizeof(ser_addr)); listen(s,0); while(1){ len = sizeof(remote_addr); newsock = accept(s,(sockaddr*)&remote_addr,&len); recv(newsock,buf,sizeof(buf),0); send(newsock,"ACK",3,0); closesocket(newsock); } closesocket(s); WSACleanup(); return 0; }
2.面向连接的客户机:
#include <winsock.h> #pragma comment(lib,"wsock32.lib") int main(int argc, char* argv[]) { SOCKET s; sockaddr_in local,server; WSAData wsa; char *buf = "I am a client"; char recvbuf[128]; WSAStartup(0x101,&wsa); s = socket(AF_INET,SOCK_STREAM,0); local.sin_family = AF_INET; local.sin_addr.S_un.S_addr = htonl(INADDR_ANY); local.sin_port = htons(0x3412); bind(s,(sockaddr*)&local,sizeof(local)); server.sin_family = AF_INET; server.sin_addr.S_un.S_addr = htonl(INADDR_LOOPBACK); server.sin_port = htons(0x1234); connect(s,(sockaddr*)&server,sizeof(server)); send(s,buf,strlen(buf),0); recv(s,recvbuf,sizeof(recvbuf),0); closesocket(s); WSACleanup(); return 0; }
3.面向无连接的服务器:
#include <winsock.h> #pragma comment(lib,"wsock32.lib") int main(int argc, char* argv[]) { SOCKET s; sockaddr_in local; sockaddr_in remote; int len; char buf[128]; WSAData wsa; WSAStartup(0x101,&wsa); s = socket(AF_INET,SOCK_DGRAM,0); local.sin_family = AF_INET; local.sin_addr.S_un.S_addr = htonl(INADDR_ANY); local.sin_addr.S_un.S_un_b = 9; local.sin_port = htons(0x1234); bind(s,(sockaddr*)&local,sizeof(local)); while(1){ len = sizeof(remote); recvfrom(s,buf,sizeof(buf),0,(sockaddr*)&remote,&len); len = sizeof(remote); sendto(s,"ACK",3,0,(sockaddr*)&remote,len); } closesocket(s); WSACleanup(); return 0; }
4.面向无连接的客户机:
#include <winsock.h> #pragma comment(lib,"wsock32.lib") int main(int argc, char* argv[]) { int len; char *sndbuf = "I am a cl client"; char recvbuf[128]; WSAData wsa; WSAStartup(0x101,&wsa); s = socket( ); local.sin_family = AF_INET; local.sin_addr.S_un.S_addr = htonl( ); local.sin_port = htons( ); bind( , ,sizeof(local)); remote.sin_family = AF_INET; remote.sin_addr.S_un.S_addr = htonl( ); remote.sin_port = htons( ); len = sizeof(remote); sendto( ,sndbuf,16,0, ,len); len = sizeof(remote); recvfrom( ,recvbuf,sizeof(recvbuf),0, ,&len); closesocket( ); WSACleanup(); return 0; }
相关文章推荐
- SCIP第四章完结
- 利用PBfunc在Powerbuilder中使用https获取微信的AccessToken
- mybatis3源码研究-构建SqlSessionFactory(一)
- CDOJ 1218 Pick The Sticks
- Android基础入门教程——8.3.11 Paint API之—— ColorFilter(颜色过滤器)(3-3)
- 百度离线地图JavaScript版本MFC应用离线纠偏
- 如何选择AFNetworking版本
- Mac+virtualbox安装win7
- Linq to DataSet 和 DataSet使用方法学习
- POJ 3261 Milk Patterns (后缀数组)
- CORS跨源资源共享
- Linux渗透之Ettercap详解
- lldb与gdb命令对照表
- 0-1背包问题与N皇后问题的纠结
- 第九周--项目4广义表算法库及应用(2)
- Skip List(跳跃表)原理详解与实现
- Android studio 安装配置
- BZOJ 1098 [POI2007]办公楼biu 链表
- Deep learning系列(十三)Transfer learning 和 caffe Fine-tuning
- Xcode LLDB Debug教程