SOCKET 编程TCP/IP、UDP
TCP/IP
资源:http://download.csdn.net/detail/mao0514/9061265
server:
#include<stdio.h> #include<winsock2.h> void main() { SOCKET servsock,clisock; struct sockaddr_in sa; struct sockaddr_in cliaddr; int servport=6666; char buff[256]; WSADATA ws; int len,err; // 初始化Winsock if(WSAStartup(0x0101,&ws)!=0) { printf("WSAStartup() failed!\n"); return; } //创建套接字 printf("Create Socket...\n"); servsock=socket(AF_INET,SOCK_STREAM,0); //填充服务器地址结构 memset(&sa,0,sizeof(sa)); sa.sin_family=AF_INET; sa.sin_port=htons(servport); sa.sin_addr.s_addr=inet_addr("192.168.1.100"); //sa.sin_addr.s_addr=inet_addr("127.0.0.1"); //绑定套接字到服务器地址结构 printf("Binding...\n"); err=bind(servsock,(const sockaddr *)&sa,sizeof(sa)); if(err!=0) { fprintf(stderr,"Bind failed:%d\n",WSAGetLastError()); return; } //监听套接字 printf("Listening...\n"); err=listen(servsock,5); if(err!=0) { fprintf(stderr,"Listen failed:%d\n",WSAGetLastError()); return; } //等待连接请求 printf("Waitting Request...\n"); len=sizeof(cliaddr); clisock=accept(servsock,(struct sockaddr *)&cliaddr,&len); len=recv(clisock,buff,sizeof(buff),0); if(len>0) { buff[len]=0; printf("%s\n",buff); } printf("Accept Client:%s:%d\n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port)); sprintf(buff,"Welcome you %s",inet_ntoa(cliaddr.sin_addr)); //发送欢迎词 send(clisock,buff,strlen(buff),0); Sleep(1000); // recv(clisock,buff,strlen(buff),0); // printf("%s\n",buff); //关闭连接 closesocket(clisock); closesocket(servsock); WSACleanup(); }
client:
#include<winsock2.h> void main() { SOCKET sock; struct sockaddr_in sa; int err; int servport=6666; char buff[256]; int len; WSADATA ws; // 初始化Winsock if(WSAStartup(0x0101,&ws)!=0) { printf("WSAStartup() failed!\n"); return; } //创建套接字 sock=socket(AF_INET,SOCK_STREAM,0); //定义服务器地址结构 memset(&sa,0,sizeof(sa)); sa.sin_family=AF_INET; sa.sin_port=htons(servport); sa.sin_addr.s_addr=inet_addr("192.168.1.100"); // 连接服务器 err=connect(sock,(const sockaddr*)&sa,sizeof(sa)); // printf("test1"); while(1) { // printf("test1"); fgets(buff,256,stdin); // for(int i=0;i<100;i++) send(sock,buff,strlen(buff),0); if(strncmp(buff,"exit",4)==0) break; len=recv(sock,buff,sizeof(buff),0); if(len>0) { buff[len]=0; printf("%s\n",buff); } } //接收欢迎词 memset(buff,0,sizeof(buff)); len=recv(sock,buff,sizeof(buff),0); printf("%s\n",buff); //关闭连接 closesocket(sock); WSACleanup(); }
UDP:
#include<stdlib.h> #include<string.h> #include<winsock2.h> #define BUFSIZE 256 void main(void) { /////////////////////////初始化///////////////////// WSADATA wsaData; WSAStartup(0x0202,&wsaData); SOCKET m_socket; m_socket=socket(AF_INET,SOCK_DGRAM,0); if(INVALID_SOCKET==m_socket) { printf("套接字创建失败!"); return; } SOCKADDR_IN addrSock; addrSock.sin_family=AF_INET; addrSock.sin_port=htons(6000); addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY); int retval; retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR)); if(SOCKET_ERROR==retval) { closesocket(m_socket); printf("绑定失败!"); } /////////////////接收/////////////////////////// SOCKADDR_IN addrFrom; int len=sizeof(SOCKADDR),len2; char recvBuf[200]; char tempBuf[300]; SOCKADDR_IN addrTo; addrTo.sin_family=AF_INET; addrTo.sin_port=htons(6001); addrTo.sin_addr.S_un.S_addr=inet_addr("192.168.1.100"); while(TRUE) { retval=recvfrom(m_socket,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len); if(SOCKET_ERROR==retval) break; for (int i=0; i<len; i++) { recvBuf[i] = toupper(recvBuf[i]); } printf(recvBuf); ///////////////////////发送////////////////////////// len2 = strlen(recvBuf); sendto(m_socket,recvBuf,len2+1,0,(SOCKADDR*)&addrTo,sizeof(SOCKADDR)); } //关闭socket closesocket(m_socket); WSACleanup(); exit(0); } //2 #include<stdlib.h> #include<string.h> #include<winsock2.h> #define BUFSIZE 256 void main(void) { WSADATA wsaData; WSAStartup(0x0202,&wsaData); SOCKET m_socket; m_socket=socket(AF_INET,SOCK_DGRAM,0); if(INVALID_SOCKET==m_socket) { printf("套接字创建失败!"); } SOCKADDR_IN addrSock; addrSock.sin_family=AF_INET; addrSock.sin_port=htons(6001); addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY); int retval; retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR)); if(SOCKET_ERROR==retval) { closesocket(m_socket); printf("绑定失败!"); } /////////////////接收/////////////////////////// SOCKADDR_IN addrFrom; int len=sizeof(SOCKADDR),len2; char recvBuf[200]; char tempBuf[300]; SOCKADDR_IN addrTo; addrTo.sin_family=AF_INET; addrTo.sin_port=htons(6000); addrTo.sin_addr.S_un.S_addr=inet_addr("192.168.1.100"); while(TRUE) { // scanf("%s",recvBuf); fgets(recvBuf,256,stdin); ///////////////////////发送////////////////////////// len2 = strlen(recvBuf); sendto(m_socket,recvBuf,len2+1,0, (SOCKADDR*)&addrTo,sizeof(SOCKADDR)); Sleep(1000); ////////////////接收///////////////////////////////// retval=recvfrom(m_socket,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len); if(SOCKET_ERROR==retval) break; printf(recvBuf); } //关闭socket closesocket(m_socket); WSACleanup(); exit(0); }
SOCKET 编程TCP/IP、UDP的更多相关文章
- SOCKET,TCP/IP,UDP,HTTP,FTP总结
一.TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组(主要解决数据如何在网络中传输),可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议 ...
- Python中Socket编程(TCP、UDP)
1. TCP协议下的如何解决粘包问题 TCP(transport control protocol 传输控制协议) 使用Nagle算法,将多次间隔较小且数据量小的数据,合并成大的数据块:接受端无法识 ...
- android 网络编程--socket tcp/ip udp http之间的关系
网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层,一般编程人员接触最多的就是应用层和运输层,再往下的就是所谓的媒体层了,不是我们研究的对象. 下面是应用层.运输层,网络 ...
- 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结
引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. ...
- 聊聊Socket、TCP/IP、HTTP、FTP及网络编程
1 这些都是什么 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. 1.1 TCP ...
- Socket网络编程(TCP/IP/端口/类)和实例
Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次 ...
- 关于Socket、TCP/IP、HTTP、FTP及网络编程
来源:陶邦仁 链接:http://blog.jobbole.com/99694/ 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,再者如何进行可靠高效 ...
- 网络通信 --> Socket、TCP/IP、HTTP、FTP及网络编程
Socket.TCP/IP.HTTP.FTP及网络编程 聊聊Socket.TCP/IP.HTTP.FTP及网络编程
- C++网络套接字编程TCP和UDP实例
原文地址:C++网络套接字编程TCP和UDP实例作者:xiaojiangjiang 1. 创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1) 创建套接字(so ...
随机推荐
- [DeeplearningAI笔记]改善深层神经网络1.4_1.8深度学习实用层面_正则化Regularization与改善过拟合
觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.4 正则化(regularization) 如果你的神经网络出现了过拟合(训练集与验证集得到的结果方差较大),最先想到的方法就是正则化(re ...
- spring之setter注入
setter注入分为2种 第一:普通属性注入 <bean id="userAction" class="com.xx.action.UserAction" ...
- JAVA动态代理机制解析
1. 概述 首先,我们来思考如下两个问题: 什么是代理模式?为什么要使用代理模式? 简单总结一下,所谓的代理模式就是在原有的服务上多加一个占位,通过这个占位去控制服务的访问.通过代理模式,一方面可以控 ...
- Storm 对 0.10.x 版 Kafka之commit offsets
由于 0.10.x 版 Kafka 与 0.8.x 版有很大的变化,这种变化对下游 Storm 有非常大的影响,0.10.x 版的 Kafka 不但增加了权限管理的功能,而且还将 simple 和 h ...
- My Calendar III
class MyCalendarThree(object): """ Implement a MyCalendarThree class to store your ev ...
- ABP官方文档翻译 4.6 审计日志
审计日志 介绍 关于IAuditingStore 配置 通过特性启用/禁用 注意事项 介绍 维基百科:“审计追踪(也称为审计日志)是与安全相关的按时间先后的记录.记录集合.记录的目的地和源,提供一系列 ...
- 最大流模版 EK
EK算法基于增广路的思想,易于理解,但由于低效并不被经常使用 #include <iostream> #include <cstdio> #include <algori ...
- BZOJ 3879: SvT [虚树 后缀树]
传送门 题意: 多次询问,给出一些后缀,求两两之间$LCP$之和 哈哈哈哈哈哈哈竟然$1A$了,刚才还在想如果写不好这道题下节数学就不上了,看来是上天让我上数学课啊 $Suffix\ Virtual\ ...
- ubuntu14.04安装、NVIDIA显卡驱动安装及CUDA8.0、Cudnn5.1的环境搭建
安装环境:hp-Z440工作站.64位Ubuntu14.04(64位Ubuntu16.04).Cuda8.0.Cudnn5.1.Nvidia GeForce GT 705.Tesla K40c 本文可 ...
- Vs Code JavaScript开发插件推荐
1 vscode-icons 使用效果 安装好后如何设置? Ctrl+Shift+P 然后输入theme 2 document this 如何使用? 在方法或者要注释的地方上 按 快捷键 Ctrl + ...