您的位置:首页 > 理论基础 > 计算机网络

【网络编程】——windows socket 编程

2016-06-03 10:36 471 查看
测试demo

#include <winsock2.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#if 0
#define TCP
#else
#define UDP
#endif

#pragma comment(lib, "ws2_32.lib")
char *ip = "10.8.2.60";
#ifdef UDP
short port = 1025;
#endif
#ifdef TCP
short port = 2222;
#endif
SOCKET fd;

int init(void) {
WSADATA wsaData;
int nRet;
if((nRet = WSAStartup(MAKEWORD(2,2),&wsaData)) != 0){
printf("WSAStartup failed!\n");
exit(0);
}
}

int init_socket(void){
SOCKADDR_IN local;
#ifdef UDP
if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1){
#endif
#ifdef TCP
if ((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1){
#endif
printf("%d\n", WSAGetLastError());
perror("socket");
//getchar();
return -1;
}

printf("fd:%d start......\n", fd);

local.sin_family = AF_INET;
local.sin_port = htons((short)port);
local.sin_addr.s_addr = inet_addr(ip);
//local.sin_addr.S_un.S_addr = inet_addr(ip);

if (bind(fd, (SOCKADDR *)&local, sizeof(local)) == SOCKET_ERROR) {
printf("reason %d ", WSAGetLastError());
printf("bind failed!\n");
getchar();
return -1;
}

#ifdef TCP
if (listen(fd, 10) == -1){
perror("listen");
return -1;
}
#endif
return 0;
}

int main(int argc, char *argv[]) {
char buffer[2048];
int size;
SOCKADDR_IN from;
int addrlen = sizeof(from);
SOCKET client;
unsigned int index = 0;

init();
if (init_socket()) {
//printf("init socket error!\n");
return -1;
}

while (1){
index++;
#ifdef UDP
size = recvfrom(fd, buffer, sizeof(buffer), 0, NULL, NULL);
printf("recvfrom:%d index:%u\n", size, index);
#endif
#ifdef TCP
if ((client = accept(fd, (SOCKADDR *)&from, &addrlen)) == -1){
perror("accept");
return -1;
}
size = recv(client, buffer, sizeof(buffer), 0);
printf("recv:%d\n", size);
#endif
}

getchar();
return 0;
}


以上是 server 端,一下是 client 端:

#include <winsock2.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#if 0
#define UDP
#else
#define TCP
#endif

#pragma comment(lib, "ws2_32.lib")
char *ip = "10.8.2.56";

#ifdef UDP
short port = 1025;
#else
short port = 2222;
#endif

SOCKET fd;

int init(void) {
WSADATA wsaData;
int nRet;
if((nRet = WSAStartup(MAKEWORD(2,2),&wsaData)) != 0){
printf("WSAStartup failed!\n");
exit(0);
}
}

int init_socket(void){

#ifdef UDP
if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1){
#else
SOCKADDR_IN local;
if ((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1){
#endif
printf("%d\n", WSAGetLastError());
perror("socket");
//getchar();
return -1;
}

#ifdef TCP

local.sin_family = AF_INET;
local.sin_port = htons(port);
local.sin_addr.S_un.S_addr = inet_addr(ip);

if (connect(fd, (SOCKADDR *)&local, sizeof(local)) == SOCKET_ERROR) {
printf("connect error!\n");
perror("connect");
return -1;
}
#endif
printf("fd:%d start......\n", fd);

return 0;
}

int main(int argc, char *argv[]) {
char buffer[512];
int size;
int result = 0;
unsigned int index = 0;

init();

if (init_socket()){
return -1;
}

#ifdef UDP
SOCKADDR_IN sin;
int addrlen = sizeof(sin);
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
sin.sin_addr.s_addr = inet_addr(ip);
#endif

memset(buffer, 1, sizeof(buffer));
while (1) {
#ifdef UDP
result = sendto(fd, buffer, sizeof(buffer), 0, (SOCKADDR *)&sin, addrlen);
#else
result = send(fd, buffer, sizeof(buffer), 0);
#endif
printf("result:%d, index:%d\n", result, index);
getchar();
index++;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: