zoukankan      html  css  js  c++  java
  • 初学socket,c语言写的简单局域网聊天

    在客户端所在的目录新建一个IP.bwj的文件,写上服务端的IP,不要带空格,保存。双方都打开一个客户端和一个服务端就可以聊天了,(可以写自己的IP,自己跟自己聊。。)没有第三方服务器,服务端所在的电脑就是服务器。程序通过AF_INET协议族,监听7464端口,没写任何错误处理,这样便于突出主要矛盾嘛。。初学见笑。。

    不知道死循环应该怎么退出,客户端可以通过输入的buffer写一个退出命令,不知道服务端怎么办,调用kbhit也不行,因为recvfrom一直在监听,我再想想。。

    客户端

    #include<stdio.h>
    #include<winsock.h>
    #pragma comment (lib,"wsock32.lib")
    
    int main()
    {
        char IPAdd[30];
        FILE *readIP = fopen("IP.bwj", "r");
        fscanf(readIP, "%s", IPAdd);
        fclose(readIP);
        char buffer[1024];
        WSADATA data;
        WSAStartup(MAKEWORD(2,0), &data);
        SOCKET mySocket;
        struct sockaddr_in server;
        int len = sizeof(server);
        server.sin_family = AF_INET;
        server.sin_port = htons(7464);
        server.sin_addr.s_addr = inet_addr(IPAdd);
        mySocket = socket(AF_INET, SOCK_DGRAM, 0);
        while(1)
        {
            scanf("%s", buffer);
            if(strcmp(buffer, "exit") == 0)break;
            sendto(mySocket, buffer, sizeof(buffer), 0,(struct sockaddr*)&server, len);
        }
        closesocket(mySocket);
        WSACleanup();
        return 0;
    }
    View Code

    服务端

    #include <stdio.h>
    #include <winsock.h>
    #pragma comment (lib, "wsock32.lib")
    int main()
    {
        char buffer[1024];
        WSADATA data;
        WSAStartup(MAKEWORD(2,0), &data);
        SOCKET mySocket;
        struct sockaddr_in local;
        struct sockaddr_in from;
        local.sin_family = AF_INET;
        local.sin_port = htons(7464);
        local.sin_addr.s_addr = INADDR_ANY;
        mySocket = socket(AF_INET, SOCK_DGRAM, 0);
        bind(mySocket, (struct sockaddr*)&local, sizeof(local));
        int len = sizeof(from);
        while(1)
        {
            recvfrom(mySocket, buffer, sizeof(buffer), 0, (struct sockaddr*)&from, &len);
            printf("Received from %s :
    %s
    ", inet_ntoa(from.sin_addr), buffer);
        }
        closesocket(mySocket);
        WSACleanup();
        return 0;
    }
    View Code
  • 相关阅读:
    【CSDN博客之星评选】我为什么坚持写博客
    关于纯css布局的概况
    IIS服务器下301跳转是怎么样实现的?
    如何使用数据库保存session的方法简介
    PHP如何通过SQL语句将数据写入MySQL数据库呢?
    PHP中文函数顺序排列一数组且其序数不变
    angular实时显示checkbox被选中的元素
    oracle查询正在执行的语句以及正被锁的对象
    angular中ng-repeat去重
    接口自动化测试框架--http请求的get、post方法的实现
  • 原文地址:https://www.cnblogs.com/wolfred7464/p/3140978.html
Copyright © 2011-2022 走看看