C中socket的基本使用

2016-07-01  本文已影响477人  醉卧栏杆听雨声

常用函数:

创建

函数原型:
int socket(int domain, int type, int protocol);
参数说明:

绑定

函数原型:

int bind(SOCKET socket, const struct sockaddr* address, socklen_t address_len);

参数说明:

接收

函数原型:

int recv(SOCKET socket, char FAR* buf, int len, int flags);

参数说明:

ssize_t recvfrom(int sockfd, void buf, int len, unsigned int flags, struct socketaddr* from, socket_t* fromlen);

参数说明:

发送

函数原型:

int sendto( SOCKET s, const char FAR* buf, int size, int flags, const struct sockaddr FAR* to, int tolen);

参数说明:

函数原型:

int accept( int fd, struct socketaddr* addr, socklen_t* len);

参数说明:

Demo(C):

服务端(Server):

#include<winsock2.h>
#include<stdio.h>
#pragmacomment(lib,"ws2_32.lib")
void main()
{
WSADATA wsaData;
SOCKET sockServer;
SOCKADDR_IN addrServer;
SOCKET sockClient;
SOCKADDR_IN addrClient;
WSAStartup(MAKEWORD(2,2),&wsaData);
sockServer=socket(AF_INET,SOCK_STREAM,0);
addrServer.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//INADDR_ANY表示任何IP
addrServer.sin_family=AF_INET;
addrServer.sin_port=htons(6000);//绑定端口6000
bind(sockServer,(SOCKADDR*)&addrServer,sizeof(SOCKADDR));
 
//Listen监听端
listen(sockServer,5);//5为等待连接数目
printf("服务器已启动:\n监听中...\n");
int len=sizeof(SOCKADDR);
charsendBuf[100];//发送至客户端的字符串
charrecvBuf[100];//接受客户端返回的字符串
 
//会阻塞进程,直到有客户端连接上来为止
sockClient=accept(sockServer,(SOCKADDR*)&addrClient,&len);
//接收并打印客户端数据
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
 
//关闭socket
closesocket(sockClient);
WSACleanup();}

客户端 (Client):

#include<winsock2.h>
#include<stdio.h>
#pragmacomment(lib,"ws2_32.lib")
void main()
{
WSADATA wsaData;
SOCKET sockClient;//客户端Socket
SOCKADDR_IN addrServer;//服务端地址
WSAStartup(MAKEWORD(2,2),&wsaData);
//新建客户端socket
sockClient=socket(AF_INET,SOCK_STREAM,0);
//定义要连接的服务端地址
addrServer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
addrServer.sin_family=AF_INET;
addrServer.sin_port=htons(6000);//连接端口6000
//连接到服务端
connect(sockClient,(SOCKADDR*)&addrServer,sizeof(SOCKADDR));
//发送数据
charmessage[20]="HelloSocket!";
send(sockClient,message,strlen(message)+1,0);
//关闭socket
closesocket(sockClient);
WSACleanup();}
上一篇下一篇

猜你喜欢

热点阅读