我刚开始接触linux下的socket编程,边抄边理解udp socket编程,我的疑问是server不指定IP地址,client的目标IP地址是127.0.0.1,这样就可以通信吗?在同一主机下是不是不能测试?如果server默认绑定本机的IP 地址,那么开启server后,在浏览器中输入127.0.0.1:(相应端口) 也可以得到数据?我的程序如下,没有跑起来,其实我觉得我不会测试,不知道本质所以会有细节漏掉。(使用的系统是ubuntu 11.10 ,编译器GCC ,分别在同一主机下的两个终端中运行生成的.out文件。)提前感谢大家的回答,不管多少,您的回答让一个初学者非常暖心~~

服务器程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include<stdio.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
 
#define lport 4567
 
int main()
{
    int mysock,len;
    struct sockaddr_in addr;
    int i=0;
    char msg[256];
 
    int addr_len;
 
    if((mysock=socket(AF_INET,SOCK_DGRAM,0))<0)
    {
        perror("error");
        exit(1);
    }
    else
    {
        printf("socket created.\n");
        printf("socket ID: %d\n",mysock);
    }
    addr_len=sizeof(struct sockaddr_in);
    bzero(&addr,sizeof(addr));
    addr.sin_family=AF_INET;
    addr.sin_port=htons(lport);
    addr.sin_addr.s_addr=htonl(INADDR_ANY);
 
    if(bind(mysock,&addr,sizeof(addr))<0)
    {
        perror("connect");
        exit(1);
    }
    else
    {
        printf("bind ok.\n");
        printf("local port: %d\n",lport);
    }
    while(1)
    {
        bzero(msg,sizeof(msg));
        len=recvfrom (mysock,msg,sizeof(msg),0,&addr,&addr_len);
 
        printf("%d: ",i);
        i++;
        printf("message form: %s\n",inet_ntoa(addr.sin_addr));
        printf("message: %s\n\n",msg);
        sendto(mysock,msg,len,0,&addr,addr_len);
    }
    return 0;
}

客户机程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include<stdio.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<sys/socket.h>
 
#define rport 4567
#define rip "127.0.0.1"
 
int main()
{
    int s,len;
    struct sockaddr_in addr;
    int addr_len;
    char msg[256];
    int i=0;
 
    if((s=socket(AF_INET,SOCK_DGRAM,0))<0)
    {
        perror("error");
        exit(1);
    }
    else
    {
        printf("socket created.\n");
        printf("socket id: %d\n",s);
        printf("romote ip: %s\n",rip);
        printf("remote port: %d\n",rport);
    }
 
    len=sizeof(struct sockaddr_in);
    bzero(&addr,sizeof(addr));
    addr.sin_family=AF_INET;
    addr.sin_port=htons(rport);
    addr.sin_addr.s_addr=inet_addr(rip);
 
    while(1)
    {
        bzero(msg,sizeof(msg));
        len=read(STDIN_FILENO,msg,sizeof(msg));
        sendto(s,msg,len,0,&addr,addr_len);
        printf("\nInput message: %s\n",msg);
        len=recvfrom(s,msg,sizeof(msg),0,&addr,&addr_len);
 
        printf("%d :",i);
        i++;
        printf("received message: %s \n",msg);
    }
    return 0;
}

linux系统UDP的socket通信编程3的更多相关文章

  1. linux系统UDP的socket通信编程2

    UDP套接字编程范例: server端代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...

  2. linux系统UDP的socket通信编程

    发送方: /* * File: main.c * Author: tianshuai * * Created on 2011年11月29日, 下午10:34 * * 主要实现:发送20个文本消息,然后 ...

  3. Linux下简单的socket通信实例

    Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...

  4. linux下C语言socket网络编程简例

    原创文章,转载请注明转载字样和出处,谢谢! 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到client的连接后,发送数据给client:clie ...

  5. 基于TCP和UDP的Socket通信

    TCP的Socket通信 TCP是面向连接的,安全的协议,它是一对一的关系 server client 上面只是单个客户端同服务器通信,可使用多线程编程实现多个客户端的通信 UDP的Socket通信 ...

  6. TCP、UDP、Socket 通信(原)

    说明:本随笔主要演示自己给自己发送消息例子,分别使用了TCP协议.UDP协议以及socket套接字通信.使用socket套接字了模拟TCP.UDP通信实现原理.其中有些源码都来自<C#高级编程 ...

  7. 【转】C# Socket通信编程

    https://www.cnblogs.com/dotnet261010/p/6211900.html#undefined 一:什么是SOCKET socket的英文原义是“孔”或“插座”.作为进程通 ...

  8. linux 系统 UDP 丢包问题分析思路

    转自:http://cizixs.com/2018/01/13/linux-udp-packet-drop-debug?hmsr=toutiao.io&utm_medium=toutiao.i ...

  9. linux系统socket通信编程详解函数

    linux socket编程之TCP与UDP   TCP与UDP区别 TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之 ...

随机推荐

  1. Java代码编写的30条建议

    1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母.例如: ThisIsAClassName thisIsM ...

  2. qsort的使用

    转自 http://blog.csdn.net/eroswang/archive/2009/04/15/4075580.aspx 最近用到了qsort,简单整理一下,方便以后的查找 qsort,包含在 ...

  3. DelegatingFilterProxy(委派过滤器代理类)使用

    本文转自:http://blog.csdn.net/flyingfalcon/article/details/8543898 DelegatingFilterProxy就是一个对于servlet fi ...

  4. hbase中double类型数据做累加

    public static Result incr(String tableFullName, String rowKey, String family, String qualifier, long ...

  5. MySQL基本命令和操作

    开启和关闭mysql服务 Windows下开启和关闭mysql服务 net start mysql # 开启mysql服务 net stop mysql # 关闭mysql服务 没有重启mysql服务 ...

  6. uboot中变量env(收集)

    Env在u-boot中通常有两种存在方式,在永久性存储介质中(flash.NVRAM等),在SDRAM中.可配置不适用env的永久存储方式,但不常用.U-boot在启动时会将存储在永久性存储介质中的e ...

  7. 实现整数转化为字符串函数itoa()函数

    函数原型: char *itoa( int value, char *string,int radix);原型说明:value:欲转换的数据.string:目标字符串的地址.radix:转换后的进制数 ...

  8. eclipse的Maven项目pom.xml错误信息提示missingxxxjar解决方案

    今天在学习的时候需要用到maven工程,当时找完所依赖的包的三要素就开始下载了,写完pom.xml需要一段时间下载这些jar包,就躺在一边等了.可能是笔记本有节能功能这个原因导致我醒来时断网发现满屏m ...

  9. 关于Cocos2d-x中多边形物理刚体的设置

    1.如果想要设置某个物体有多边形的刚体,这样可以更精确地进行碰撞检测,可以用以下的方法 auto hero = PlaneHero::create(); addChild(hero, 0, HERO_ ...

  10. 初识EseNt

    转自:http://www.cnblogs.com/goosao/archive/2011/09/23/2186412.html 一.什么是EseNtEseNt(Extensible Storage ...