图表流程

linux udp测试代码

//server.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <sys/unistd.h>
#include <arpa/inet.h> #define PORT 8999
#define MAXSIZE 4096 int main(int argc, char *argv[])
{
int sockfd, addr_len;
struct sockaddr_in serv_addr, clnt_addr;
char recvmsg[MAXSIZE], sendmsg[MAXSIZE]; sockfd = socket(AF_INET, SOCK_DGRAM, );
if (sockfd < ) {
perror("socket error");
return -;
} serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
serv_addr.sin_addr.s_addr = INADDR_ANY;
memset(&(serv_addr.sin_zero), ,); if (bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) < ) {
perror("bind err");
return -;
} while() {
memset(sendmsg, , MAXSIZE);
memset(recvmsg, , MAXSIZE);
addr_len = sizeof(struct sockaddr);
/* 所谓的非阻塞I/O */
if (recvfrom(sockfd, recvmsg, MAXSIZE, , (struct sockaddr *)&clnt_addr, &addr_len) < ) {
perror("recv");
continue;
} printf("begin to accept\n");
printf("recv from %s : %s\n", inet_ntoa(clnt_addr.sin_addr), recvmsg);
strcpy(sendmsg, "who are you ?? Let me cc!");
sendto(sockfd, sendmsg, strlen(sendmsg) + , , (struct sockaddr *)&clnt_addr, addr_len);
} return ;
}
//client.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <sys/unistd.h>
#include <arpa/inet.h> #define PORT 8999
#define DESIP "192.168.23.109"
#define MAXSIZE 4096 int main(int argc, char *argv[])
{
int sockfd, addr_len;
struct sockaddr_in des_addr;
char sendmsg[MAXSIZE], recvmsg[MAXSIZE]; sockfd = socket(AF_INET, SOCK_DGRAM, );
if (sockfd < ) {
perror("socket error");
return -;
} des_addr.sin_family = AF_INET;
des_addr.sin_port = htons(PORT);
des_addr.sin_addr.s_addr = inet_addr(DESIP);
//bzero(&(des_addr.sin_zero), 8);
memset(&(des_addr.sin_zero), ,);
while () {
memset(recvmsg, , MAXSIZE);
memset(sendmsg, , MAXSIZE);
printf("input:\n");
gets(sendmsg);
if (strcmp(sendmsg, "quit") == ) {
close(sockfd);
printf("close connection\n");
return -;
}
if (sendto(sockfd, sendmsg, strlen(sendmsg) + , , (struct sockaddr *)&des_addr, sizeof(struct sockaddr)) < ) {
perror("sendto");
continue;
}
printf("send ok...\n"); while () {/* 所谓的非阻塞I/O */
addr_len = sizeof(struct sockaddr);
if (recvfrom(sockfd, recvmsg, MAXSIZE, , (struct sockaddr *)&des_addr, &addr_len) < ) {
continue;
}
printf("recv from %s : %s\n", inet_ntoa(des_addr.sin_addr), recvmsg);
break;
}
} return ;
}

参考资料:

Linux的Socket编程详解

Linux Socket编程(不限Linux)

网络编程Socket UDP的更多相关文章

  1. 网络编程socket基本API详解(转)

    网络编程socket基本API详解   socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...

  2. 网络编程 单纯UDP通信

    网络编程 单纯UDP通信 1,UDP发送端 2,UDP接收端 UDP发送端: #include <stdio.h> #include <unistd.h> #include & ...

  3. 铁乐学Python_Day33_网络编程Socket模块1

    铁乐学Python_Day33_网络编程Socket模块1 部份内容摘自授课老师的博客http://www.cnblogs.com/Eva-J/ 理解socket Socket是应用层与TCP/IP协 ...

  4. Python网络编程socket

    网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...

  5. java:网络编程(UDP (DatagramSocket和DatagramPacket)正则表达式)

    java:网络编程(UDP (DatagramSocket和DatagramPacket)正则表达式) * TCP* 特点:面向连接,点对点的通信,效率较低,但安全可靠* UDP:用户数据报协议,类似 ...

  6. java网络编程socket\server\TCP笔记(转)

    java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅     1 TCP的开销 a ...

  7. Android 网络编程 Socket

    1.服务端开发 创建一个Java程序 public class MyServer { // 定义保存所有的Socket,与客户端建立连接得到一个Socket public static List< ...

  8. 网络编程Socket之TCP之close/shutdown具体解释(续)

    接着上一篇网络编程Socket之TCP之close/shutdown具体解释 如今我们看看对于不同情况的close的返回情况和可能遇到的一些问题: 1.默认操作的close 说明:我们已经知道writ ...

  9. linux网络编程-socket(37)

    在编程的时候需要加上对应pthread开头的头文件,gcc编译的时候需要加了-lpthread选项 第三个参数是线程的入口参数,函数的参数是void*,返回值是void*,第四个参数传递给线程函数的参 ...

随机推荐

  1. 获取地理位置的html5代码

    /** * 以下为html5代码,获取地理位置 */ function getLocation() { //检查浏览器是否支持地理位置获取 if (navigator.geolocation) { / ...

  2. jetty-distribution-7.6.x 部署

    (1)启动 jetty 命令:java - jar start.jar 需要注意2个事项:必须使用JDK来运行jetty:启动是需要读取 start.ini 的配置信息. (2)第一个注意事项只要保证 ...

  3. android文件系统挂载分析(1)---正常开机挂载

    未完,更新中 ... "android"系列分为三部分: 1.正常开机挂载 2.encryption 3.dm-verity 我们知道android有很多分区,如"sys ...

  4. 快餐店运行模拟C++程序源码代写

    某快餐店供应若干种快餐和饮料(5种以上),早晨6:00开始营业,晚上11:00打烊.前一天已经安排了若干工人上班,快餐店的用餐位是固定的,每种食物的成本和销售价格是确定的,每种食物的总量是确定的,储存 ...

  5. jquery中ajax向action传递对象参数,json ,spring注入对象

    首先,我这个程序的框架是spring+struts2+hibernate. 后端的action的需要接受从前端传进来的参数,由spring的注入,可知,如果前端用的是form的话,只需要在每个inpu ...

  6. Mac OS X Yosemite 10.10 配置 Apache+PHP 教程注意事项

    刚更新到了 Mac OS X Yosemite 10.10,发现运行Apache出现了一些问题,修正一下! 教程基于 Mac OS X Mavericks 10.9.X,移步:Mac OS X Mav ...

  7. hdu 4340 树状DP

    思路:我们定义两个数组,ant[Maxn][2],bob[Maxn][2].ant[i][0]表示还未确定哪个城市被全费用占领,ant[i][1]表示确定了哪个城市被全费用占领.那么ant[i][0] ...

  8. 转:从零开始开发一款Android App (from 简书)

    转: http://www.jianshu.com/p/a58d15ef5c8b

  9. 自动化中的PageObject思想

    谈着这个话题很大,因为我自己在自动化分层的方面做的就不是很好,最近在做java+selenium中,如果不分层去管理,代码就显得很乱,如下: 下面代码主要是做了一个登录,登录后在修改自己的一些个人信息 ...

  10. codevs4373 窗口==poj2823 Sliding Window

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 53676   Accepted: 15399 ...