下面用Socket实现一个windows下的c语言socket通信例子,这里我们客户端传递一个字符串,服务器端进行接收。
【服务器端】
#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#include <winsock2.h>
#define SERVER_PORT 5208 //侦听端口
void main()
具体怎么写,没有人能告诉你,因为每个系统的需求不一样。我说一下我的程序希望对你有点帮助,分为5个部分(网络通信、协议解析、数据库操作、缓存管理、事件处理),网络通信主要有接收、发送、连接、关闭连接、数据分包这5个功能(我用得是完成端口来实现的),协议解析主要有转义/还原、校验、解析/打包这5个功能,数据库我就只封装调用存储过程,缓存管理就是存储一些经常操作的数据(避免频繁操作数据库),事件处理就是根据不同的协议对象来触发相应的处理函数。/* File: server.c */#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char **argv)
{
int fd
int address_len
struct sockaddr_in address
//建立套接口
fd = socket(AF_INET, SOCK_DGRAM, 0)//SOCK_DGRAM
//绑定地址和端口
bzero(&address, sizeof(address))
address.sin_family = AF_INET
address.sin_addr.s_addr = htonl(INADDR_ANY)
address.sin_port = htons(1234)
address_len = sizeof(address)
bind(fd, (struct sockaddr *)&address, address_len)
while(1) {
struct sockaddr_in client_address
socklen_t len = sizeof(client_address)
int n
char line[80]
printf("waiting...")
fflush(stdout)
//接收数据
n = recvfrom(fd, line, 80, 0,
(struct sockaddr *)&client_address, &len)
printf("server received %d:%s", n, line)
//发送数据
sendto(fd, line, n, 0,
(struct sockaddr *)&client_address, len)
}
}
/* File: client.c */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char **argv)
{
int fd
struct sockaddr_in address
int address_len
char line[80] = "Client to Server string!\n"
int n
//建立套接口
fd = socket(AF_INET, SOCK_DGRAM, 0)//AF_INET和SOCK_DGRAM的组合对应UDP协议
//联接
bzero(&address, sizeof(address))
address.sin_family = AF_INET
address.sin_addr.s_addr = inet_addr("193.193.196.1")
address.sin_port = htons(1234)
address_len = sizeof(address)
//发送数据
sendto(fd, line, strlen(line)+1, 0,
(struct sockaddr *)&address, sizeof(address))
//接收数据
n = recvfrom(fd, line, 80, 0, NULL, NULL)
printf("received %d:%s", n, line)
}
仔细读一下,最好下次能自己写^_^,起码要弄懂原理
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)