【tcp/ip】无连接交互式通信[udp]

server.cpp

#include <Winsock2.h>
#include <stdio.h>
#include <string>
#include <stdlib.h>
#define DEFAULT_PORT 5060
#define BUFFER_LENGTH 1024
using namespace std;
string GetLocalIpAddress()
{
	WORD wVersionRequested = MAKEWORD(2, 2);

	WSADATA wsaData;
	if (WSAStartup(wVersionRequested, &wsaData) != 0)
		return "";

	char local[255] = {0};
	gethostname(local, sizeof(local));
	hostent* ph = gethostbyname(local);
	if (ph == NULL)
		return "";

	in_addr addr;
	memcpy(&addr, ph->h_addr_list[0], sizeof(in_addr)); // 这里仅获取第一个ip

	string localIP;
	localIP.assign(inet_ntoa(addr));

	WSACleanup();
	return localIP;
}
int main()
{
     char date[100];
    strcpy (date, const_cast<char*>(GetLocalIpAddress().c_str()));
    int iPort = DEFAULT_PORT;
    WSADATA  wsaData;
    SOCKET   sSocket;
    int iLen;
    int iSend;
    int iRecv;
    char send_buf[BUFFER_LENGTH];
    char recv_buf[BUFFER_LENGTH];
    struct sockaddr_in ser,cli;
    printf("-----------------------\n");
    printf("Server waiting!\n");
    printf("------------------------\n");
    if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
    {
        printf("Failed to load Winsock.\n");
        return 0;
    }
    sSocket = socket(AF_INET,SOCK_DGRAM,0);
    if(sSocket == INVALID_SOCKET)
    {
        printf("socket()Failed:%d\n",WSAGetLastError());
        return 0;
    }
    ser.sin_family = AF_INET;
    ser.sin_port = htons(iPort);
    ser.sin_addr.s_addr=htonl(INADDR_ANY);
    if(bind(sSocket,(LPSOCKADDR)&ser,sizeof(ser))==SOCKET_ERROR)
    {
        printf("bind()Failed:%d\n",WSAGetLastError());
        return 0;
    }
    iLen = sizeof(cli);
    while(1)
    {
        memset(recv_buf,0,sizeof(recv_buf));
        iRecv=recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(SOCKADDR*)&cli,&iLen);
        if(iRecv==SOCKET_ERROR)
        {
            printf("recvfrom():%d\n",WSAGetLastError());
            break;
        }
    else if(iRecv==0)break;
            else
            {
                if(recv_buf[0]=='#') printf("client has already quit!\n");
                else if(cli.sin_addr.s_addr==inet_addr(date))printf("Becky:%s\n",recv_buf);
                else printf("Eric:%s\n",recv_buf);
               // printf("Accepted client IP:[%s],port:[%d]\n",inet_ntoa(cli.sin_addr),ntohs(cli.sin_port));
            }
    }
    closesocket(sSocket);
    WSACleanup();
    return 0;
}

client.cpp

#include <Winsock2.h>
#include <stdio.h>
#include <string>
#define DEFAULT_PORT 5060
#define DATA_BUFFER 1024
using namespace std;

string GetLocalIpAddress()
{
	WORD wVersionRequested = MAKEWORD(2, 2);

	WSADATA wsaData;
	if (WSAStartup(wVersionRequested, &wsaData) != 0)
		return "";

	char local[255] = {0};
	gethostname(local, sizeof(local));
	hostent* ph = gethostbyname(local);
	if (ph == NULL)
		return "";

	in_addr addr;
	memcpy(&addr, ph->h_addr_list[0], sizeof(in_addr)); // 这里仅获取第一个ip

	string localIP;
	localIP.assign(inet_ntoa(addr));

	WSACleanup();
	return localIP;
}
int main(int argc,char *argv[])
{
    char date[100];
	 strcpy (date, const_cast<char*>(GetLocalIpAddress().c_str()));
    WSADATA wsaData;
    SOCKET sClient,sSelf;
    int iPort = DEFAULT_PORT;
    int iLen,iSend,iRecv,iSend2,sLen;
    char buf[DATA_BUFFER];
    char recv_buf[DATA_BUFFER];
    char send_buf[DATA_BUFFER]="Hello i am a cilent!";
    struct sockaddr_in ser,ser2;
    if(argc<2)
    {
        printf("Usage:client [server IP address]\n");
        return 0;
    }
    memset(recv_buf,0,sizeof(recv_buf));
    if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
    {
        printf("Failed to load Winsock.\n");
        return 0;
    }
    ser.sin_family = AF_INET;
    ser.sin_port = htons(iPort);
    ser.sin_addr.s_addr=inet_addr(argv[1]);
    ser2.sin_family = AF_INET;
    ser2.sin_port = htons(iPort);
    ser2.sin_addr.s_addr=inet_addr(date);
    sClient = socket(AF_INET,SOCK_DGRAM,0);
    sSelf = socket(AF_INET,SOCK_DGRAM,0);
    if(sClient==INVALID_SOCKET)
    {
    	 printf("socket()Failed:%d\n",WSAGetLastError());
        return 0;
    }
    if(sSelf==INVALID_SOCKET)
    {
    	 printf("socket()Failed:%d\n",WSAGetLastError());
        return 0;
    }
    sLen =sizeof(ser2);
    iLen = sizeof(ser);
    while(1)
    {
    gets(send_buf);
    iSend=sendto(sClient,send_buf,sizeof(send_buf),0,(struct sockaddr*)&ser,iLen);
    iSend2 = sendto(sSelf,send_buf,sizeof(send_buf),0,(struct sockaddr*)&ser2,sLen);
    if(iSend==SOCKET_ERROR)
    {
        printf("sendto()Failed:%d\n",WSAGetLastError());
        return 0;
    }
    else if(iSend==0) return 0;

    if(iSend2==SOCKET_ERROR)
    {
        printf("sendto()Failed:%d\n",WSAGetLastError());
        return 0;
    }
    else if(iSend2==0) return 0;
    if(send_buf[0]=='#') break;
    }
    /*iRecv=recvfrom(sClient,recv_buf,sizeof(recv_buf),0,(struct sockaddr*)&ser,&iLen);
    if(iRecv==SOCKET_ERROR)
    {
       printf("recvfrom()Failed:%d\n",WSAGetLastError());
       return 0;
    }
    else if(iRecv==0) return 0;
        else
        {
            printf("%s",recv_buf);
                printf("recvfrom()succeeded!\n");
            printf("-------------------\n");
        }//*/
    closesocket(sClient);
    WSACleanup();

    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
2025-12-17 16:48
今天九点半到公司,我跟往常一样先扫了眼电脑,屁活儿没有。寻思着没事干,就去蹲了个厕所,回来摸出手机刷了会儿。结果老板刚好路过,拍了我一下说上班别玩手机,我吓得赶紧揣兜里。也就过了四十分钟吧,我的直属领导把我叫到小隔间,上来就给我一句:“你玩手机这事儿把老板惹毛了,说白了,你可以重新找工作了,等下&nbsp;HR&nbsp;会来跟你谈。”&nbsp;我当时脑子直接宕机,一句话都没憋出来。后面&nbsp;HR&nbsp;找我谈话,直属领导也在旁边。HR&nbsp;说我这毛病不是一次两次了,属于屡教不改,不光上班玩手机,还用公司电脑看论文、弄学校的事儿。我当时人都傻了,上班摸鱼是不对,可我都是闲得发慌的时候才摸啊!而且玩手机这事儿,从来没人跟我说过后果这么严重,更没人告诉我在公司学个习也算犯错!连一次口头提醒都没有,哪儿来的屡教不改啊?更让我膈应的是,昨天部门刚开了会,说四个实习生里留一个转正,让大家好好表现。结果今天我就因为玩手机被开了。但搞笑的是,开会前直属领导就把我叫去小会议室,明明白白告诉我:“转正这事儿你就别想了,你的学历达不到我们部门要求,当初招你进来也没打算给你这个机会。”合着我没入贵厂的眼是吧?可我都已经被排除在转正名单外了,摸个鱼至于直接把我开了吗?真的太离谱了!
rush$0522:转正名单没进,大概率本来就没打算留你
摸鱼被leader发现了...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务