TCP服务器

#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<arpa/inet.h>
 
 
#define ERR_MSG(msg) do{\
    fprintf(stderr,"line:%d",__LINE__);\
    perror(msg);\
}while(0)
 
#define IP "192.168.5.53"  //本机ip
#define PORT 6667
int main(int argc, const char *argv[])
{
    //创建流式套接字
    int sfd =socket(AF_INET,SOCK_STREAM,0);
    if(sfd<0)
    {
        ERR_MSG("scoket");
        return -1;
    }
    printf("sfd=%d\n",sfd);
 
    //允许端口快速重用
    int reuse =1;
    if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
    {
        ERR_MSG("setsockopt");
        return -1;
    }
    printf("允许端口快速重用成功\n");
    //填充地址信息结构体
    //真实的地址信息结构体根据地址族指定 AF_INET:man 7 ip
    struct sockaddr_in sin;
    sin.sin_family =AF_INET;  //必须填AF_INET
    sin.sin_port  =htons(PORT); //端口号 1024~49151
    sin.sin_addr.s_addr=inet_addr(IP); //本机ip ifconfig
    
 
    //将IP和端口绑定到套字节上
    if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0)
    {
        ERR_MSG("bind");
        return -1;
    }
    printf("bind success __%d__\n",__LINE__);
 
    //将套接字设置为被动监听状态,监听是否有客户端连接成功
    if(listen(sfd,128)<0)
    {
        ERR_MSG("listen");
        return -1;
    }
    printf("listen success __%d__\n",__LINE__);
 
    struct sockaddr_in cin;  //存储连接成功的客户端地址信息
    socklen_t addrlen =sizeof(cin);
 
    //阻塞函数,从已完成连接的队列中获取一个客户
    //该文件描述符才是与客户端通信的文件描述符!!
    int newfd =accept(sfd,(struct sockaddr*)&cin,&addrlen);
    if(newfd<0)
    {
        ERR_MSG("accept");
        return -1;
    }
    printf("[%s:%d] newfd=%d 连接成功__%d__\n",\
        inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,__LINE__);
    char buf[128]="";
    ssize_t res=0;
    while(1)
    {
        bzero(buf,sizeof(buf));
        //接收
        res= recv(newfd,buf,sizeof(buf),0);
        if(res<0)
        {
        ERR_MSG("recv");
        return -1;
        }
        else if(0==res)
        {
        printf("[%s:%d] newfd=%d 客户端下线__%d__\n",\
        inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,__LINE__);
        break;
        }
        printf("[%s:%d] newfd=%d :%s__%d__\n",\
        inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,buf,__LINE__);
 
        //发送
        strcat(buf,"*_*");
        if(send(newfd,buf,sizeof(buf),0)<0)
        {
        ERR_MSG("send");
        return -1;
        }
        printf("发送成功\n");
    }
 
    //关闭
    close(newfd);
    close(sfd);
 
    return 0

TCP        客户端

#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<arpa/inet.h>
 
 
#define ERR_MSG(msg) do{\
    fprintf(stderr,"line:%d",__LINE__);\
    perror(msg);\
}while(0)
 
#define IP "192.168.5.53"  //本机ip
#define PORT 6667
int main(int argc, const char *argv[])
{
    //创建流式套接字
    int cfd =socket(AF_INET,SOCK_STREAM,0);
    if(cfd<0)
    {
        ERR_MSG("scoket");
        return -1;
    }
    printf("cfd=%d\n",cfd);
 
    //允许端口快速重用
    int reuse =1;
    if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
    {
        ERR_MSG("setsockopt");
        return -1;
    }
    printf("允许端口快速重用成功\n");
    //填充地址信息结构体
    //真实的地址信息结构体根据地址族指定 AF_INET:man 7 ip
    struct sockaddr_in sin;
    sin.sin_family =AF_INET;  //必须填AF_INET
    sin.sin_port  =htons(PORT); //端口号 1024~49151
    sin.sin_addr.s_addr=inet_addr(IP); //本机ip ifconfig
    
 
    //非必须绑定
    
    //connect 连接服务器
    
    if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0)
    {
        ERR_MSG("connect");
        return -1;
    }
    printf("connect success __%d__\n",__LINE__);
    
    char buf[128]="";
    ssize_t res=0;
    while(1)
    {
 
        //发送 从终端获取数据
        bzero(buf,sizeof(buf));
        printf("请输入>>>");
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1]=0;
 
        if(send(cfd,buf,sizeof(buf),0)<0)
        {
            ERR_MSG("send");
            return -1;
        }
        printf("发送成功\n");
 
        bzero(buf,sizeof(buf));
        //接收
        res= read(cfd,buf,sizeof(buf));
        //res= recv(cfd,buf,sizeof(buf),0);
        if(res<0)
        {
            ERR_MSG("recv");
            return -1;
        }
        else if(0==res)
        {
            printf("cfd=%d 客户端下线__%d__\n",cfd,__LINE__);
            break;
        }
        printf("cfd=%d :%s__%d__\n",cfd,buf,__LINE__);
    }
 
    //关闭
    close(cfd);
    return 0;;

UDP服务器

#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<arpa/inet.h>
 
 
#define ERR_MSG(msg) do{\
    fprintf(stderr,"line:%d",__LINE__);\
    perror(msg);\
}while(0)
 
#define IP "192.168.5.53"  //本机ip
#define PORT 6666
int main(int argc, const char *argv[])
{
    //创建流式套接字
    int sfd =socket(AF_INET,SOCK_DGRAM,0);
    if(sfd<0)
    {
        ERR_MSG("scoket");
        return -1;
    }
    printf("sfd=%d\n",sfd);
 
 
    //真实的地址信息结构体根据地址族指定 AF_INET:man 7 ip
    struct sockaddr_in sin;
    sin.sin_family =AF_INET;  //必须填AF_INET
    sin.sin_port  =htons(PORT); //端口号 1024~49151
    sin.sin_addr.s_addr=inet_addr(IP); //本机ip ifconfig
    
 
    //将IP和端口绑定到套字节上,必须绑定
    if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0)
    {
        ERR_MSG("bind");
        return -1;
    }
    printf("bind success __%d__\n",__LINE__);
    //存储数据包是从谁哪里来的
    struct sockaddr_in cin; 
    socklen_t addrlen =sizeof(cin);
    char buf[128]="";
    ssize_t res=0;
    while(1)
    {
        bzero(buf,sizeof(buf));
        //接收
        res= recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&addrlen);
        if(res<0)
        {
            ERR_MSG("recvfrom");
            return -1;
        }
 
        printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);
                
        //发送
        strcat(buf,"*_*");
        if(sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,sizeof(cin))<0)
        {
            ERR_MSG("sendto");
            return -1;
        }
        printf("发送成功\n");
    }
 
    //关闭
    close(sfd);
 
    return 0;

UDP客户端

#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<arpa/inet.h>
 
 
#define ERR_MSG(msg) do{\
    fprintf(stderr,"line:%d",__LINE__);\
    perror(msg);\
}while(0)
 
#define IP "192.168.5.53"  //本机ip
#define PORT 6666
int main(int argc, const char *argv[])
{
    //创建流式套接字
    int cfd =socket(AF_INET,SOCK_DGRAM,0);
    if(cfd<0)
    {
        ERR_MSG("scoket");
        return -1;
    }
    printf("sfd=%d\n",cfd);
 
 
    //真实的地址信息结构体根据地址族指定 AF_INET:man 7 ip
    struct sockaddr_in sin;
    sin.sin_family =AF_INET;  //必须填AF_INET
    sin.sin_port  =htons(PORT); //端口号 1024~49151
    sin.sin_addr.s_addr=inet_addr(IP); //本机ip ifconfig
    
#if 0
    //将IP和端口绑定到套字节上,必须绑定
    if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0)
    {
        ERR_MSG("bind");
        return -1;
    }
    printf("bind success __%d__\n",__LINE__);
#endif
    struct sockaddr_in rcvaddr; 
    socklen_t addrlen =sizeof(rcvaddr);
    char buf[128]="";
    ssize_t res=0;
    while(1)
    {
        //发送
        bzero(buf,sizeof(buf));
        printf("请输入>>>");
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1]=0;
        if(sendto(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,sizeof(sin))<0)
        {
            ERR_MSG("sendto");
            return -1;
        }
        printf("发送成功\n");
 
        bzero(buf,sizeof(buf));
        //接收
        res= recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,&addrlen);
        if(res<0)
        {
            ERR_MSG("recvfrom");
            return -1;
        }
 
        printf("[%s:%d]:%s\n",inet_ntoa(rcvaddr.sin_addr),ntohs(rcvaddr.sin_port),buf);
                
    }
 
    //关闭
    close(cfd);
 
    return 0;UDP

【无标题sdasd】相关推荐

  1. 关于WM_NCHITTEST消息(移动无标题对话框多个)

    我为了移动一个无标题栏的窗体,使用了WM_NCHITTEST消息,这个消息大概如下: 通常,我们拖动对话框窗口的标题栏来移动窗口,但有时候,我们想通过鼠标在客户区上拖动来移动窗口. 一个容易想到的方案 ...

  2. mysql输入命令1002无标题_Linux下远程连接MySQL数据库的方法

    步骤 1.在服务器端开启远程访问 首先进入mysql数据库,然后输入下面两个命令: grant all privileges on *.* to 'root'@'%' identified by 'p ...

  3. C# 系统应用之无标题窗体移动的两种方法

    在做项目界面设计中,常常为了美观需要设置窗体属性"FormBorderStyle"(窗体边框和标题栏外观)为None无标题窗口.此时隐藏标题的窗口怎样实现移动呢?我根据自己的项目从 ...

  4. Android 置Activity全屏和无标题

    今天,实在没有什么好些写的内容,所以在网上找了很久,才决定写这个博客.比较简单,还是想保持写博客的习惯. 一.在代码里设置全屏. Activity设置全屏和无标题栏,要用到andorid.view.W ...

  5. ActionBarActivity设置全屏无标题

    新建的Activity继承自ActionBarActivity,设置全屏无标题本来非常easy的事,可是没想到app居然无缘无故的挂,要么就是白屏一片,要么就是黑屏.坑了我一个多小时.!! 原因是Ac ...

  6. android教程1009无标题,Android ActionBarActivity设置全屏无标题实现方法总结_Android_脚本之家...

    Android  ActionBarActivity设置全屏无标题实现方法总结 前言: 新建的Activity继承自ActionBarActivity,设置全屏无标题本来很简单的事,但是没想到app竟 ...

  7. MFC修改窗口无标题和标题信息,修改执执行文件图标

    一.创建MFC后 窗口显示的是 无标题-工程名 修改方法在网上看到了几种,下面介绍下比较简单的一种: 1.在MianFrame.c文件中找到这个函数 BOOL CMainFrame::PreCreat ...

  8. Visual Studio Code中的无标题(工作区)

    点击文件--将工作区另存为--重新将工作区重命名 即可 我进行更改的时候,发现我之前无标题(工作区)里的文件都消失了,还好发现只是软件里消失.电脑磁盘里保存还有这些文件,之后 打开软件--点击文件-- ...

  9. html是什么1003无标题,爱特漫画1003无标题

    爱特漫画1003无标题有着非常不错的便利性功能能够让用户们轻松的享受到自己需要的漫画阅读体验.各种功能都是为了服务漫友而打造的喜欢漫画的话就快下载吧. 爱特漫画1003无标题特色: 1.主页有一个特殊 ...

最新文章

  1. 独家 | 层级聚类和Python实现的初学者指南(附链接)
  2. JZOJ__Day 7:【普及模拟】max
  3. Java【前端动态添加一条记】【后端使用JDK1.8实现map对象根据key的部分值进行分组】(并将map对象封装成指定entity对象)
  4. 洛谷 1057——传球游戏(递推与递归二分)
  5. 上拉加载 php,php+jquery 上拉加载
  6. gdb调试fork多进程
  7. SQL Server之增删改操作
  8. 如何正确认识C语言在当今编程领域的地位
  9. Linux expr命令、Linux wc命令、Linux let 命令
  10. exif.js html图片旋转,解决图片显示 Exif.js更改图片的显示方向
  11. 【LeetCode】【HOT】20. 有效的括号(栈)
  12. ipad远程连接虚拟机linux,如何从ipad pro上通过SSH远程Linux
  13. python中response对象的属性_Django 中的响应对象 Response
  14. Netty工作笔记0001---Netty介绍
  15. [Ext JS 4] Grid 实战之分页功能
  16. python实现给定一个字符串,寻找最长非重复子串
  17. MySql 5.7.2搭建主从(master/slave)复制
  18. 计算机及编程语言历史概述
  19. NokiaE6 java_全键盘塞班Anna手机 诺基亚E6详细评测
  20. 零基础,新手小白看过来!易用可视化工具推荐

热门文章

  1. 数据库For Web
  2. 常用的DC插头公头的尺寸
  3. kvc实践一:核心方法和进阶
  4. 你想进大厂吗?这份所有大厂都绕不过的MySQL宝典值得你一看
  5. 多客| Lazada上传产品为什么审核不通过?卖家应遵守哪些规则?
  6. 摊上事儿的网易邮箱和安全圈的那些“防御机制”
  7. cadence SPB17.4 - allegro - 手工放置原理图没有的封装
  8. 转 FTP搜索引擎的设计与实现(优化版)
  9. python selenium 爬虫 网站seo刷流量 第一篇:百度搜索
  10. 给网站开发者推荐18个在线手册,值得收藏