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 ...
随机推荐
- STP协议
STP协议的作用: 第一, 可以避免网络环路和广播风暴. 二层数据包是没有TTL(time to live)的,如果不加以限制,可能会无限的传播下去.二层设备间如果存在环路,大量的广播包就可能导致广播 ...
- bzoj 4823: [Cqoi2017]老C的方块 [最小割]
4823: [Cqoi2017]老C的方块 题意: 鬼畜方块游戏不解释... 有些特殊边,有些四个方块组成的图形,方块有代价,删掉一些方块使得没有图形,最小化代价. 比较明显的最小割,一个图形中必须删 ...
- vue2.0 组织机构树形选择组件(类似elementui <el-transfer> 与 <el-tree> 两个标签的结合)
1. 效果图 2. 实现: 三级(部门或人员的树形选择) 3. 模拟数据说明: fake.js name: 显示的名称(同时也是源码中 for 循环单一的key , 如果真实数据存在名字有重 ...
- zzcms8.2#任意用户密码重置#del.php时间盲注#复现
00x0 引言 早上起来,发现seebug更新了一批新的洞, 发现zzcms8.2这个洞好多人在挖,于是我就默默的踏上了复现之路(要不是点进去要买详情,我何必这么折腾~) 环境:zzcms8.2(产品 ...
- AMD && CMD
前言 JavaScript初衷:实现简单的页面交互逻辑,寥寥数语即可: 随着web2.0时代的到来,Ajax技术得到广泛应用,jQuery等前端库层出不穷,前端代码日益膨胀 问题: 这时候JavaSc ...
- 【JavaWeb】c3p0连接池与MySQL
正文之前 在之前的文章讲到了传统的JDBC连接MySQL的方式,但是这样的方式在进行多个连接时,就显得效率低下,明显不如连接池的效率,所以我们这次来讲解一下JDBC连接池之一:c3p0 正文 1. 准 ...
- yii2 源码分析Behavior类分析 (四)
Behavior类是所有事件类的基类,它继承自object类 Behavior类的前面注释描述大概意思: * Behavior类是所有事件类的基类 * * 一个行为可以用来增强现有组件的功能,而不需要 ...
- mysql 修改默认字符集为utf8
MySQL 5.5, all you need is: [mysqld] character_set_client=utf8 character_set_server=utf8 collation_s ...
- linux scp远程拷贝文件及文件夹
[http://www.jb51.net/LINUXjishu/73131.html] 1.拷贝本机/home/administrator/test整个目录至远程主机192.168.1.100的/ro ...
- 批量修改git仓库地址脚本
前言 公司的代码都存放在自己搭建的gitlab上面.之前由于老板升级gitlab.导致下面有个叫做"api"的groups无法访问.通过无所不能的谷歌才知道.在gitlab在某 ...