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 ...
随机推荐
- Linux下查找大文件以及目录
转自:http://www.cnblogs.com/kerrycode/p/4391859.html 在Windows系统中,我们可以使用TreeSize工具查找一些大文件或文件夹,非常的方便高效,在 ...
- selenium模拟浏览器对搜狗微信文章进行爬取
在上一篇博客中使用redis所维护的代理池抓取微信文章,开始运行良好,之后运行时总是会报501错误,我用浏览器打开网页又能正常打开,调试了好多次都还是会出错,既然这种方法出错,那就用selenium模 ...
- CSS中的选择器之html选择器和伪类选择器
1.html选择器(标签选择器) 基本语法: html标签名称{ 属性名:属性值; 属性名:属性值; } 继续在上面的代码中做修改,实例代码: <!DOCTYPE html> <ht ...
- DIV+CSS中的滤镜和模糊
在div+css中,经常会用到div和span 当内容比较多的时候,会用到div 当内容比较少的时候,会用到span 来看下面的代码: <!DOCTYPE html> <html&g ...
- c#写的热键注册程序
玩网页游戏挂机,又不想让别人看见你电脑的运行.所以写了个后台运行的程序. 先谁HotKey注册类,用来调用com组件来显示与隐藏窗体: using System; using System.Colle ...
- BZOJ 3640: JC的小苹果 [概率DP 高斯消元 矩阵求逆]
3640: JC的小苹果 题意:求1到n点权和\(\le k\)的概率 sengxian orz的题解好详细啊 容易想到\(f[i][j]\)表示走到i点权为j的概率 按点权分层,可以DP 但是对于\ ...
- .net下使用socket.io随笔记录
一.问题背景 目前公司在互联网产品上需要程序与前端部分要进行一个实时交互,在进行一定程度上的选型后,决定使用socket.io框架进行一个实践,算是公司的一个新的 尝试,也算是给自己增加增长见闻,由于 ...
- Windows 定时任务对数据库进行操作
定时对数据库进行操作可以用mysql的event事件来完成,但是只有mysql5.1后的才支持,所以有一定的局限性,也可以通过其他的mysql管理软件实现,而我发现Windows本身就有个定时任务的功 ...
- BCDEdit命令添加WinPE启动项
bcdedit /create {ffffffff-8d96-11de-8e71-ffffffffffff} /d "系统维护" /device bcdedit /create ...
- sparksql工程小记
最近做一个oracle项目迁移工作,跟着spark架构师学着做,进行一些方法的总结. 1.首先,创建SparkSession对象(老版本为sparkContext) val session = Spa ...