网络编程; winSock;
2010-07-07 23:17
183 查看
#include <Winsock2.h> #include <stdio.h> int main() { //////////////////////////////////////////// //设置选择WinSock协议 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return 1; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return 1; } //////////////////////////////////////////////////////// SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); char recvBuf[100]; char sendBuf[100]; char tempBuf[100]; SOCKADDR_IN addrClient; int len =sizeof(SOCKADDR); while(true) { recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len); if('q'==recvBuf[0]) { sendto(sockSrv,"q",strlen("q")+1,0,(SOCKADDR*)&addrClient,len); printf("chat end/n"); break; } else { sprintf(tempBuf,"%s say: %s",inet_ntoa(addrClient.sin_addr),recvBuf); printf("%s/n",tempBuf); printf("请输入数据/n"); gets(sendBuf); sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len); } } closesocket(sockSrv); WSACleanup(); return 0; }
服务器端 ,UDP不需要建立连接, 但是需要绑定服务端.
#include <Winsock2.h> #include <stdio.h> int main() { //////////////////////////////////////////// //设置选择WinSock协议 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return 1; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return 1; } //////////////////////////////////////////////////////// SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); char recvBuf[100]; char sendBuf[100]; char tempBuf[100]; int len =sizeof(SOCKADDR); while(1) { printf("输入数据:"); gets(sendBuf); sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len); recvfrom(sockClient,recvBuf,100,0,(SOCKADDR*)&addrSrv,&len); if('q'==recvBuf[0]) { sendto(sockClient,"q",strlen("q")+1,0,(SOCKADDR*)&addrSrv,len); printf("chat end/n"); break; } else { sprintf(tempBuf,"%s say:%s",inet_ntoa(addrSrv.sin_addr),recvBuf); puts(tempBuf); } } closesocket(sockClient); WSACleanup(); return 0; }
客户端,UDP .
UDP 使用sendto,recvfrom
#include <Winsock2.h> #include <stdio.h> int main() { //////////////////////////////////////////// //设置选择WinSock协议 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return 1; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return 1; } //////////////////////////////////////////////////////// SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0); // 创建套接字 SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); listen(sockSrv,SOMAXCONN); SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); while(true) { SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); char sendBuf[100]; sprintf(sendBuf,"hello,%s",inet_ntoa(addrClient.sin_addr)); send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf[100]; recv(sockConn,recvBuf,strlen(recvBuf),0); printf("%s/n",recvBuf); closesocket(sockConn); } return 0; }
TCP , 服务端, 先加载网络dll,然后生成socket套接字, 然后建立连接信息, 然后设置监听, 获取连接的套接字进行操作.
#include <Winsock2.h> #include <stdio.h> #include <windows.h> int main() { //////////////////////////////////////////// //设置选择WinSock协议 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return 1; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return 1; } //////////////////////////////////////////////////////// SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); char recvBuf[100]; recv(sockClient,recvBuf,100,0); printf("%s/n",recvBuf); send(sockClient,"123123",strlen("123123")+1,0); closesocket(sockClient); WSACleanup(); system("pause"); }
TCP,客户端, 先连接服务端,然后接受发送消息.
TCP使用recv,send.
相关文章推荐
- Winsock网络编程
- Windows网络编程之winsock实现文件传输示例
- 网络编程Winsock——WSAStartup
- 网络编程Winsock——bind
- 利用WinSock实现简单网络编程
- Winsock 网络编程
- Winsock 网络编程 Socket模型之WSAAsyncSelect模型
- Window网络编程之Winsock(一)起步
- VC网络编程-Winsock开发网络通信程序的经典入门
- 不用WinSock、CSocket,只用Win32进行网络编程...应该怎么理解?
- winsock网络编程
- Windows的网络编程-之一-WinSock基础
- Windows的网络编程-之一-WinSock基础
- 网络编程 C++ ———WinSock
- 关于winsock中网络编程事件模型和窗口消息模型中FD_WRITE的理解与数据的发送需要注意的关键点
- 网络编程Winsock——accept
- Windows网络编程笔记4 -- Winsock 协议相关知识
- 网络编程winsock入门
- windows网络编程之Winsock(三)非阻塞select模式服务器
- 什么是网络编程,Winsock ,SDK