socket编程c语言,socket编程-c代码

下面是个socket编程的例子——客户端可发送字符到服务端,服务端负责显示客户端发送过来的字符。

客户端:

#include

#include

#pragma comment(lib,"WS2_32.LIB")

#define Port 3578

#define MaxSize 1024

void main()

{

WORD

wVersionRequested;

WSADATA

wsaData;

int err;

wVersionRequested=MAKEWORD(2,2);

err=WSAStartup(wVersionRequested,&wsaData);

if

(err!=0)

{

printf("WinSock DLL版本不足要求n");

return;

}

if

(LOBYTE(wsaData.wVersion)!=2||

HIBYTE(wsaData.wVersion)!=2)

{

WSACleanup();

return;

}

//创建套接字

SOCKET

sockClient=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//把U_LONG的主机字节顺序转换为TCP/IP网络字节顺序

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(Port);

//向服务器发送请求

if(connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))

== -1)

{

printf("连接失败!输入回车结束程序!n");

getchar();

return;

}

//接受数据

char

recBuf[MaxSize];

recv(sockClient,recBuf,MaxSize,0);

printf("%sn",recBuf);

//输入name

printf("Input your Name:n");

char

name[20] = {0};

gets(name);

//发送数据

send(sockClient,name,strlen(name)+1,0);

while(1)

{

gets(recBuf);

send(sockClient,recBuf,strlen(recBuf)+1,0);

}

//关闭套接字

closesocket(sockClient);

getchar();

WSACleanup();

}

服务器端:

#include

#include

#pragma comment(lib,"WS2_32.LIB")

#define Port 3578

#define MaxSize 1024

void main()

{

//加载套接字

WORD

wVersionRequested;

WSADATA

wsaData;

int err;

wVersionRequested=MAKEWORD(2,2);

err =

WSAStartup(wVersionRequested,&wsaData);

if

(err!=0)

{

printf("WinSock DLL版本不足要求n");

return;

}

if

(LOBYTE(wsaData.wVersion)!=2||

HIBYTE(wsaData.wVersion)!=2)

{

WSACleanup();

return;

}

//创建监听的套接字

SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv;

//把U_LONG的主机字节顺序转换为TCP/IP网络字节顺序

addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY)

addrSrv.sin_family = AF_INET;

addrSrv.sin_port = htons(Port);

//绑定套接字

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

//将套接字设置为监听模式,准备接受用户请求

listen(sockSrv,5);

SOCKADDR_IN

addrClient;

int len=sizeof(SOCKADDR);

printf("%sn","Welcome,the Host is running!nWating for someone comes

in!");

while (1)

{

//等待用户请求到来

SOCKET

sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);

char

sendBuf[MaxSize];

sprintf(sendBuf,"Welcome to the Host,%s.",

inet_ntoa(addrClient.sin_addr));

//发送数据

send(sockConn,sendBuf,MaxSize,0);

//接收数据

char

revBuf[MaxSize];

char name[20] = {0};

int flag = 1;

while(recv(sockConn,revBuf,MaxSize,0) != -1)

{

//打印接受数据

if(flag == 1)

{

strcpy(name, revBuf);

printf("%s comes in!n",name);

flag = 2;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最新版Socket编程,后面带有程序实例,并通过调试,可以直接编译运行;希望对大家有帮助。代码设计服务端、客户端socket实例,设计IPV4、IPV6的实例代码。 网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。 部分代码(服务器): #include #include #include #include #include #include #include #include #define SERVPORT 3333 /*服务器监听端口号 */ #define BACKLOG 10 /* 最大同时连接请求数 */ main() { int sockfd,client_fd; /*sockfd:监听socket;client_fd:数据传输socket */ struct sockaddr_in my_addr; /* 本机地址信息 */ struct sockaddr_in remote_addr; /* 客户端地址信息 */ if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror( "socket创建出错!"); exit(1); } my_addr.sin_family=AF_INET; my_addr.sin_port=htons(SERVPORT); my_addr.sin_addr.s_addr = INADDR_ANY; bzero( &(my_addr.sin_zero),8); if (bind(sockfd, (struct sockaddr *) &my;_addr, sizeof(struct sockaddr)) == -1) { perror( "bind出错!"); exit(1); } if (listen(sockfd, BACKLOG) == -1) { perror( "listen出错!"); exit(1); } while(1) { sin_size = sizeof(struct sockaddr_in); if ((client_fd = accept(sockfd, (struct sockaddr *) &remote;_addr, &sin;_size)) == -1) { perror( "accept出错"); continue; } printf( "received a connection from %s\n", inet_ntoa(remote_addr.sin_addr)); if (!fork()) { /* 子进程代码段 */ if (send(client_fd, "Hello, you are connected!\n", 26, 0) == -1) perror( "send出错!"); close(client_fd); exit(0); } close(client_fd); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值