UDP发送和接收
MainRecv.cpp
#include <iostream>
#include <WinSock2.h>
#include <sstream> #pragma comment(lib,"ws2_32.lib") #define RECV_IP "127.0.0.1"
#define RECV_PORT 8899
#define LEN_RECV_BUF 2048 int main()
{
std::ostringstream ossTemp;
WSAData wsaData; std::cout<<"Start..."<<std::endl; WSAStartup(MAKEWORD(2,2),&wsaData);
SOCKET sktRecv=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); sockaddr_in addrRecv;
addrRecv.sin_family=AF_INET;
addrRecv.sin_addr.s_addr=inet_addr(RECV_IP);
//htonl(INADDR_ANY);
addrRecv.sin_port=htons(RECV_PORT); int retVal; retVal=bind(sktRecv,(sockaddr*)&addrRecv,sizeof(addrRecv)); sockaddr_in addrClient;
char buf[LEN_RECV_BUF];
int len=sizeof(addrClient);
while(true)
{
memset(buf,0,LEN_RECV_BUF);
retVal=recvfrom(sktRecv,buf,LEN_RECV_BUF,0,(sockaddr*)&addrClient,&len);
if(SOCKET_ERROR==retVal)
{
ossTemp<<"recvfrom error : "<<retVal<<"\n";
OutputDebugString(ossTemp.str().c_str());
break;
}
if(strlen(buf)>0)
std::cout<<buf<<std::endl;
} closesocket(sktRecv);
WSACleanup(); std::cout<<"Recv Over"<<std::endl;
getchar();
return -1;
}

MainSend.cpp

#include <iostream>
#include <sstream>
#include <WinSock2.h> #define IP_SEND "127.0.0.1"
#define PORT_SEND 8899
#define LEN_SEND_BUF 1024 #pragma comment(lib,"ws2_32.lib") int main()
{
WSAData wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData); std::cout<<"Begin Sending..."<<std::endl; std::ostringstream ossTemp;
SOCKET sktSend=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
sockaddr_in addrSend;
addrSend.sin_family=AF_INET;
addrSend.sin_addr.s_addr=inet_addr(IP_SEND);
addrSend.sin_port=htons(PORT_SEND);
int retVal; char buf[LEN_SEND_BUF];
int len=sizeof(addrSend);
int index=0;
while(true)
{
if(index>255)
break;
ossTemp.str("");
ossTemp<<index;
memset(buf,0,LEN_SEND_BUF);
memcpy(buf,ossTemp.str().c_str(),sizeof(int));
retVal=sendto(sktSend,buf,LEN_SEND_BUF,0,(sockaddr*)&addrSend,len);
if(SOCKET_ERROR==retVal)
{
ossTemp.str("");
ossTemp<<"sendto error : "<<retVal;
OutputDebugString( ossTemp.str().c_str() );
break;
}
std::cout<<"Send : "<<buf<<std::endl;
index++;
} closesocket(sktSend);
WSACleanup(); std::cout<<"Send Over"<<std::endl;
getchar();
return 0;
}

========================

linux下socket使用备忘:

先看文件列表:

Config.h...........................................

#define SERVER_IP "192.168.6.129"
#define SERVER_PORT 12345

Makefile

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>  //inet_addr需要引用
#include <string.h>  //memset方法需要引用
#include <unistd.h>  //close(sock_id)方法需要引用

#include "Config.h"

#define BUFSIZE 1024

int main(int argc,char* argv[])
{
int server_sockfd;
int client_sockfd;
int len;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size;
char buf[BUFSIZE];
memset(&server_addr,0,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=inet_addr("192.168.6.129");
//inet_pton(AF_INET,"192.168.6.129",&(server_addr.sin_addr));
server_addr.sin_port=htons(SERVER_PORT);

if( (server_sockfd=socket(AF_INET,SOCK_STREAM,0))<0 ){
perror("create sockets failed.");
return -1;
}

if( bind(server_sockfd,(struct sockaddr*)&server_addr,sizeof(struct sockaddr))<0 ){
perror("bind the socket failed.");
return -1;
}

listen(server_sockfd,5);

sin_size=sizeof(struct sockaddr_in);

if( (client_sockfd=accept(server_sockfd,(struct sockaddr*)&client_addr,(socklen_t*)&sin_size))<0 ){
perror("accept the connect failed.");
return -1;
}
printf( "accept client %s\n",inet_ntoa(client_addr.sin_addr) );
len=send(client_sockfd,"Welcome to my server\n",21,0);

while( (len=recv(client_sockfd,buf,BUFSIZE,0))>0 ){
buf[len]='\0';
printf("%s\n",buf);
if( send(client_sockfd,buf,len,0)<0 ){
perror("write failed.");
return -1;
}
}

close(client_sockfd);
close(server_sockfd);
return 0;
}

MySockTcpClient.cpp...........................................

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>

#include "Config.h"

#define BUFSIZE 1024

int main(int argc,char* argv[])
{
int client_sockfd;
int len;
struct sockaddr_in server_addr;
char buf[BUFSIZE];
memset(&server_addr,0,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=inet_addr(SERVER_IP);
//inet_pton(AF_INET,SERVER_IP,&(server_addr.sin_addr));
server_addr.sin_port=htons(SERVER_PORT);

if( (client_sockfd=socket(PF_INET,SOCK_STREAM,0))<0 ){
perror("create the socket failed.");
return -1;
}

if( connect(client_sockfd,(struct sockaddr*)&server_addr,sizeof(struct sockaddr))<0 ){
perror("connect the server failed.");
}

printf("connected to server\n");
len=recv( client_sockfd,buf,BUFSIZE,0 );
buf[len]='\0';
printf("%s",buf);

while(1){
printf("Enter string to send:");
scanf("%s",buf);
if( !strcmp(buf,"quit") )
break;
len=send(client_sockfd,buf,strlen(buf),0);
len=recv(client_sockfd,buf,BUFSIZE,0);
buf[len]='\0';
printf("received:%s\n",buf);
}

close(client_sockfd);
return 0;

}

Makefile..................................................

CC=g++
CFLAGS=-I. -g

all:MySockTcpServer MySockTcpClient

MySockTcpServer:MySockTcpServer.o
  $(CC) -o MySockTcpServer MySockTcpServer.o -I.
MySockTcpClient:MySockTcpClient.o
  $(CC) -o MySockTcpClient MySockTcpClient.o -I.

clean:
  rm -f *.o MySockTcpClient MySockTcpServer

注意:

比较window,差别是:

1,头文件不同;

2,对socket的类型定义上有差别;

设置端口缓存大小:

//2. may set socket behavior 
int nErrCode;
unsigned int uiRcvBuf;
int uiRcvBufLen = sizeof(uiRcvBuf);
nErrCode= getsockopt(m_tcpClient, SOL_SOCKET, SO_RCVBUF, (char*)&uiRcvBuf, &uiRcvBufLen);
if(SOCKET_ERROR == nErrCode) return FALSE;
if(uiRcvBuf!=1024*8){
  //uiRcvBuf *= BUF_MULTIPLE;
  uiRcvBuf=1024*8;
  nErrCode = setsockopt(m_tcpClient, SOL_SOCKET, SO_RCVBUF,(char*)&uiRcvBuf, uiRcvBufLen);
if (SOCKET_ERROR == nErrCode) return FALSE;

nErrCode=getsockopt(m_tcpClient, SOL_SOCKET, SO_RCVBUF,(char*)&uiRcvBuf, &uiRcvBufLen);
if (SOCKET_ERROR == nErrCode) return FALSE;
if(uiRcvBuf!=1024*8) return FALSE;
}

socket基本使用的更多相关文章

  1. socket读写返回值的处理

    在调用socket读写函数read(),write()时,都会有返回值.如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲 ...

  2. Socket聊天程序——Common

    写在前面: 上一篇记录了Socket聊天程序的客户端设计,为了记录的完整性,这里还是将Socket聊天的最后一个模块--Common模块记录一下.Common的设计如下: 功能说明: Common模块 ...

  3. Socket聊天程序——客户端

    写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...

  4. Socket聊天程序——服务端

    写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...

  5. Socket聊天程序——初始设计

    写在前面: 可能是临近期末了,各种课程设计接踵而来,最近在csdn上看到2个一样问答(问题A,问题B),那就是编写一个基于socket的聊天程序,正好最近刚用socket做了一些事,出于兴趣,自己抽了 ...

  6. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  7. Android Socket连接PC出错问题及解决

    最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.

  8. Linux下的C Socket编程 -- server端的继续研究

    Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...

  9. Mono 3.2.3 Socket功能迎来一稳定的版本

    由于兴趣自己业余时间一直在搞.net下面的通讯应用,mono的存在得以让.NET程序轻松运行在Linux之下.不过经过多尝试Socket相关功能在Mono下的表现并不理想.不管性能还是吞吐能力方面离我 ...

  10. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...

随机推荐

  1. Codefroces Gym101572 I.Import Spaghetti-有向图跑最小环输出路径(Floyd)

    暑假学的很多东西,现在都忘了,补这道题还要重新学一下floyd,有点难过,我暑假学的东西呢??? 好了,淡定,开始写题解. 这个题我是真的很难过啊,输入简直是有毒啊(内心已经画圈诅咒出题人无数次了.. ...

  2. 初级Springboot(一)

    初级Springboot(一) 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 一.了解Springboot 做Java开发的小伙伴都知道,我们在做项目的时候,需要去写大量的配置文件 ...

  3. Extjs grid 单元格事件

    celldblclick: function (view, td, cellIndex, record, tr, rowIndex, e, eOpts) { //extjs 4.2下,有时出现,多次不 ...

  4. 用JSONObject解析和处理json数据

    (一)jar包下载 所需jar包打包下载百度网盘地址:https://pan.baidu.com/s/1c27Uyre (二)常见场景及处理方法 1.解析简单的json字符串: 1 // 简单的jso ...

  5. Linux下快速删除输错的密码技巧(快速删除输入的命令)

    1.[Esc]+[退格键(Backspace)] 2.[Ctrl]+[U] 说明:以上两个快捷键都会删除全部输错的命令或密码. 参考: http://blog.csdn.net/u013895662/ ...

  6. javascript --- 临时构造器F()

    这篇内容也是之前讲到过的,纯属无聊,莫要见怪.~(- ̄▽ ̄)-~(- ̄▽ ̄)-~(- ̄▽ ̄)-~(- ̄▽ ̄)-~(- ̄▽ ̄)- 正如上文所说,如果所有的prototype属性都指向了一个相同的对象,父 ...

  7. openfire Android学习(一)----实现用户注册、登录、修改密码和注销等

    以前学习过用Scoket 建立聊天,简单的建立聊天是没问题的,但如果要实现多人复杂的聊天,后台服务器代码就比较复杂,对于我这新手来讲就比较难了.后来在网上看到用openfire做服务器,利用强大的Sm ...

  8. VC2012编译protobuf出错处理

    近来要学习protobuf的协议生成.须要从网上下载它的代码,从这个SVN地址下载: 个.因此编译提示上面的出错.仅仅须要把std;;tuple里的个数定义为10个就可以.,因此不支持5个以上的參数输 ...

  9. Hibernate调试——定位查询源头

    本文是我在importNew翻译的文章,首发在importNew,这里会定期更新链接. 为什么有时Hibernate会在程序某一部分生成一条指定sql查询?这个问题让人非常难立马理解.当处理不是我们本 ...

  10. C 标准库 - <time.h>

    C 标准库 - <time.h> 简介 time.h 头文件定义了四个变量类型.两个宏和各种操作日期和时间的函数. 库变量 下面是头文件 time.h 中定义的变量类型: 序号 变量 &a ...