4,390
社区成员
发帖
与我相关
我的任务
分享
void io_callback(LoopHandle loop, CBHandle w, int revents)
{
SOCKET fd = w->fd;
#ifdef LWDP_PLATFORM_DEF_WIN32
fd = _get_osfhandle (w->fd);
#endif
struct sockaddr_in addr;
int addr_size = sizeof(addr);
int* accept_conn = (int*)malloc(sizeof(int));
while ((*accept_conn = accept(fd, (struct sockaddr *)&addr, &addr_size)) < 0)
{
if (errno == EAGAIN)
{
//these are transient, so don't log anything.
continue;
}
else
{
LWDP_LOG_PRINT("TCPSERVER", LWDP_LOG_MGR::ERR,
"Accept Error.");
return;
}
}
pthread_t t;
int result;
result = pthread_create(&t, NULL, thread_callback, accept_conn);
if(result != 0){
LWDP_LOG_PRINT("TCPSERVER", LWDP_LOG_MGR::ERR,
"Can't Create Thread Ret: %d\n", result);
return;
}
result = pthread_detach(t);
if(result != 0){
LWDP_LOG_PRINT("TCPSERVER", LWDP_LOG_MGR::ERR,
"Can't Detach Thread Ret: %d\n", result);
return;
}
}
#include "stdafx.h"
#include <winsock2.h>
#include <windows.h>
#include <iostream>
using namespace std;
#define SERVPORT 12135 /*服务器监听端口号*/
#define DEST_IP "127.0.0.1"
#define MAXDATASIZE 100
int _tmain(int argc, _TCHAR* argv[])
{
int sockfd, recvbytes;
char buf[MAXDATASIZE];
struct hostent *host;
struct sockaddr_in serv_addr;
struct sockaddr_in dest_addr; /* 目的地址*/
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2,0);
err = WSAStartup(wVersionRequested,&wsaData);
if (0 != err)
{
cout<<"Socket failed";
return 0;
}
if (LOBYTE(wsaData.wVersion)!= 2 || HIBYTE(wsaData.wVersion) != 0)
{
WSACleanup();
return 0;
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
perror("socket创建出错!");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVPORT);
/* serv_addr.sin_addr = *((struct in_addr *)host->h_addr);*/
serv_addr.sin_addr.s_addr = inet_addr(DEST_IP);
memset( &(serv_addr.sin_zero),0,8);
if (connect(sockfd, (struct sockaddr *) &serv_addr, \
sizeof(struct sockaddr)) == -1) {
perror("connect出错!");
//exit(1);
}
char szMsg[] = "hao";
int nlen = sizeof(serv_addr);
char* msg = "Hello, are connected!";
int uIndex = 0;
while (1)
{
Sleep(5000);
if (send(sockfd, msg, sizeof(msg), 0) == -1)
{
cout<<WSAGetLastError()<<endl;
closesocket(sockfd);
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
perror("socket创建出错!");
exit(1);
}
if (connect(sockfd, (struct sockaddr *) &serv_addr, \
sizeof(struct sockaddr)) == -1)
{
perror("connect出错!");
continue;
}
}
else
{
cout<<uIndex++<<":an TCP package is sended"<<endl;
continue;
}
if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) !=-1)
{
buf[recvbytes] = '\0';
printf( "Received: %s",buf);
}
}
closesocket(sockfd);
return 0;
}