linux系统UDP的socket通信编程3

我刚开始接触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;

}

时间: 2024-10-27 11:02:40

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

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 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 58 59 60 61 62 63 64 65 66 67 68 69 /************************

linux系统UDP的socket通信编程

发送方: /* * File: main.c * Author: tianshuai * * Created on 2011年11月29日, 下午10:34 * * 主要实现:发送20个文本消息,然后再发送一个终止消息 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #incl

Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select poll epoll udp组播 线程池

[本文谢绝转载原文来自http://990487026.blog.51cto.com] Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select  poll  epoll udp组播 线程池 TCP 11种状态理解: 1,客户端正常发起关闭请求 2,客户端与服务端同时发起关闭请求 3,FIN_WAIT1直接转变TIME_WAIT 4,客户端接收来自服务器的关闭连接请求 多路IO转接服务器: select模型 poll模型 epoll模型 udp组播模型 线

Linux统系统开发11 Socket API编程2 多进程 多线程 高并发处理

[本文谢绝转载原文来自http://990487026.blog.51cto.com] <纲要> Linux统系统开发11 Socket API编程2 多进程 多线程 高并发处理 UDP服务器 客户端最小模型,处理字符转大写 TCP 多进程并发服务器模型,为每个客户端开启一个进程: TCP 多线程服务器模型,使用wrap函数封装 作业: ---------------------------------------------------- UDP服务器 客户端最小模型,处理字符转大写 [em

Linux程序设计学习笔记----Socket网络编程基础之TCP/IP协议簇

转载请注明出处: ,谢谢! 内容提要 本节主要学习网络通信基础,主要涉及的内容是: TCP/IP协议簇基础:两个模型 IPv4协议基础:IP地址分类与表示,子网掩码等 IP地址转换:点分十进制\二进制 TCP/IP协议簇基础 OSI模型 我们知道计算机网络之中,有各种各样的设备,那么如何实现这些设备的通信呢? 显然是通过标准的通讯协议,但是,整个网络连接的过程相当复杂,包括硬件.软件数据封包与应用程序的互相链接等等,如果想要写一支将联网全部功能都串连在一块的程序,那么当某个小环节出现问题时,整只

Linux下简单的socket通信实例

Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Bruce Lee       学习网络编程也一段时间了,刚开始看<UNIX网络编程>的时候,觉得这本厚厚的书好难啊!看到后来,发现并没有想象中的那么难.如果你是新手,建议你看到第二部分结束后,开始着手写代码.不写代码肯定是不行的.看100遍也没有敲一遍实现一遍来的清楚.敲完以后,带着问题去看书,你会

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

转自:http://blog.csdn.net/kikilizhm/article/details/7858405 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到客户端的连接后,发送数据给客户端:客户端在接受到数据后打印出来,然后关闭.程序里有详细的说明,其中对具体的结构体和函数的实现可以参考其他资料. 程序说明: 这里服务器的端口号和ip地址使用固定的设置,移植时可以根据具体情况更改,可以改写为参数传递更好,这里为了方便,使用固定的. 移

[java]基于UDP的Socket通信Demo

java课编程作业:在老师给的demo的基础上实现客户端发送数据到服务器端,服务器端接受客户端后进行数据广播. 整体功能类似于聊天室,代码部分不是太难,但是在本机测试的时候出现这样的问题: 服务端通过将每一个Socket客户端的IP存入Set集合,每次接受到数据后都向当前所有的IP转发.但是本机演示的时候所有开的ChatClient客户端都是同一IP,怎么测试呢? 解决办法就是本机测试时候服务端向多个不同的端口转发就好了,这样跑起来的客户端是在不同端口上进行监听的(只是为了实现广播,实际应用下还

基于UDP的Socket网络编程实现用户登录的实现

package Test_UDP_Socket; import java.net.DatagramPacket.* //服务器端 import java.net.DatagramSocket; import java.net.InetAddress; public class ServerUDP { public static void main(String[] args) throws Exception{ //1.先实现接收Client信息 DatagramSocket socketSer