socket udp
来源:互联网 发布:淘宝网上买手机可靠吗 编辑:程序博客网 时间:2024/06/05 04:41
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "winsock2.h"
typedef struct tagSOCKET_SERVER_INFO_S
{
int port;
char ip[32];
}SOCKET_SERVER_INFO_S;
int clientSendThread(void* pv)
{
SOCKET sendSocket;
sockaddr_in serverAddr;
SOCKET_SERVER_INFO_S *serverInfo = (SOCKET_SERVER_INFO_S *)pv;
int ret = 0;
sendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(serverInfo->port);
serverAddr.sin_addr.s_addr = inet_addr(serverInfo->ip);
while(TRUE)
{
char buf[64];
_snprintf(buf, sizeof(buf), "client(%d)'s message, last ret(%d)", GetCurrentThreadId(), ret);
ret = sendto(sendSocket, buf, sizeof(buf), 0, (SOCKADDR *) &serverAddr, sizeof(serverAddr));
srand( (unsigned)GetTickCount());
Sleep((rand()%2 == 0)? 3000:1000);
}
closesocket(sendSocket);
return 0;
}
void runClient(SOCKET_SERVER_INFO_S *serverInfo)
{
HANDLE clientThreadHandle1 = NULL;
HANDLE clientThreadHandle2 = NULL;
clientThreadHandle1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)clientSendThread, serverInfo, 0, NULL);
clientThreadHandle2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)clientSendThread, serverInfo, CREATE_SUSPENDED, NULL);
Sleep(500);
ResumeThread (clientThreadHandle2);
CloseHandle(clientThreadHandle1);
CloseHandle(clientThreadHandle2);
}
int serverRecvThread(void* pv)
{
SOCKET recvSocket;
sockaddr_in serverAddr;
SOCKET_SERVER_INFO_S *serverInfo = (SOCKET_SERVER_INFO_S *)pv;
int serverAddrSize = sizeof(serverAddr);
recvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(serverInfo->port);
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(recvSocket, (SOCKADDR *) &serverAddr, sizeof(serverAddr));
while(TRUE)
{
char buf[64] = {0};
int ret = 0;
ret = recvfrom(recvSocket, buf, sizeof(buf), 0, (SOCKADDR *) &serverAddr, &serverAddrSize);
printf("recv: [%s] ret(%d)\n", buf, ret);
}
closesocket(recvSocket);
return 0;
}
void runServer(SOCKET_SERVER_INFO_S *serverInfo)
{
HANDLE serverThreadHandle = NULL;
serverThreadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)serverRecvThread, serverInfo, 0, NULL);
CloseHandle(serverThreadHandle);
}
void initApp(SOCKET_SERVER_INFO_S *serverInfo)
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
memset(serverInfo, 0, sizeof(SOCKET_SERVER_INFO_S));
serverInfo->port = 9527;
strncpy(serverInfo->ip, "127.127.0.1", sizeof(serverInfo->ip));
printf("init app, ip(%s) port(%d)\n", serverInfo->ip, serverInfo->port);
}
void destroyApp()
{
printf("bye\n");
WSACleanup();
}
int main(int a, char** b)
{
static SOCKET_SERVER_INFO_S serverInfo;
initApp(&serverInfo);
runServer(&serverInfo);
runClient(&serverInfo);
getchar();
destroyApp();
return 0;
}
#include <stdlib.h>
#include <time.h>
#include "winsock2.h"
typedef struct tagSOCKET_SERVER_INFO_S
{
int port;
char ip[32];
}SOCKET_SERVER_INFO_S;
int clientSendThread(void* pv)
{
SOCKET sendSocket;
sockaddr_in serverAddr;
SOCKET_SERVER_INFO_S *serverInfo = (SOCKET_SERVER_INFO_S *)pv;
int ret = 0;
sendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(serverInfo->port);
serverAddr.sin_addr.s_addr = inet_addr(serverInfo->ip);
while(TRUE)
{
char buf[64];
_snprintf(buf, sizeof(buf), "client(%d)'s message, last ret(%d)", GetCurrentThreadId(), ret);
ret = sendto(sendSocket, buf, sizeof(buf), 0, (SOCKADDR *) &serverAddr, sizeof(serverAddr));
srand( (unsigned)GetTickCount());
Sleep((rand()%2 == 0)? 3000:1000);
}
closesocket(sendSocket);
return 0;
}
void runClient(SOCKET_SERVER_INFO_S *serverInfo)
{
HANDLE clientThreadHandle1 = NULL;
HANDLE clientThreadHandle2 = NULL;
clientThreadHandle1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)clientSendThread, serverInfo, 0, NULL);
clientThreadHandle2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)clientSendThread, serverInfo, CREATE_SUSPENDED, NULL);
Sleep(500);
ResumeThread (clientThreadHandle2);
CloseHandle(clientThreadHandle1);
CloseHandle(clientThreadHandle2);
}
int serverRecvThread(void* pv)
{
SOCKET recvSocket;
sockaddr_in serverAddr;
SOCKET_SERVER_INFO_S *serverInfo = (SOCKET_SERVER_INFO_S *)pv;
int serverAddrSize = sizeof(serverAddr);
recvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(serverInfo->port);
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(recvSocket, (SOCKADDR *) &serverAddr, sizeof(serverAddr));
while(TRUE)
{
char buf[64] = {0};
int ret = 0;
ret = recvfrom(recvSocket, buf, sizeof(buf), 0, (SOCKADDR *) &serverAddr, &serverAddrSize);
printf("recv: [%s] ret(%d)\n", buf, ret);
}
closesocket(recvSocket);
return 0;
}
void runServer(SOCKET_SERVER_INFO_S *serverInfo)
{
HANDLE serverThreadHandle = NULL;
serverThreadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)serverRecvThread, serverInfo, 0, NULL);
CloseHandle(serverThreadHandle);
}
void initApp(SOCKET_SERVER_INFO_S *serverInfo)
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
memset(serverInfo, 0, sizeof(SOCKET_SERVER_INFO_S));
serverInfo->port = 9527;
strncpy(serverInfo->ip, "127.127.0.1", sizeof(serverInfo->ip));
printf("init app, ip(%s) port(%d)\n", serverInfo->ip, serverInfo->port);
}
void destroyApp()
{
printf("bye\n");
WSACleanup();
}
int main(int a, char** b)
{
static SOCKET_SERVER_INFO_S serverInfo;
initApp(&serverInfo);
runServer(&serverInfo);
runClient(&serverInfo);
getchar();
destroyApp();
return 0;
}
0 0
- socket udp
- socket UDP
- socket udp
- UDP Socket
- SOCKET UDP
- UDP Socket
- udp socket
- socket udp
- udp socket
- udp socket
- Socket-UDP
- UDP socket
- socket(UDP)
- socket udp
- socket udp
- udp socket
- udp socket
- java udp socket
- Phoenix在建表是报出java.lang.ArrayIndexOutOfBoundsException的处理方法
- struct device
- CSS神奇的代码-背景透明内容不透明
- 删除数组中相同的元素
- 快速排序
- socket udp
- 深入浅出RxJava_07[多线程&辅助操作(完)]
- Java面向对象三大特性归纳
- LAMP编译安装
- 关于使用引用类型所引起的错误
- 全排列(非递归)
- 2017移动互联网寒冬(Android)求职随感
- 一些图片过渡特效(C/C++)
- java零基础的外行人之(一) JAVA开发环境,基本类型,运算符