18,356
社区成员
发帖
与我相关
我的任务
分享
//服务器
#include<winsock2.h>
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#define MYPORT 4000
#define BACKLOG 5
#define MAXDATASIZE 100
int main()
{
WSADATA wsaData;
//初始化Socket库
WSAStartup(MAKEWORD(2,0),&wsaData);
int sockfd,newfd;
int sin_size, numbytes;
SOCKADDR_IN my_addr;
SOCKADDR_IN their_addr;
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(MYPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
ZeroMemory(&(my_addr.sin_zero), 8);
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==SOCKET_ERROR)
{
perror("socket");
exit(1);
}
if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))==SOCKET_ERROR)
{
perror("bind");
exit(1);
}
if(listen(sockfd,BACKLOG)==SOCKET_ERROR)
{
perror("listen");
exit(1);
}
char recvbuf[MAXDATASIZE];
char sendbuf[MAXDATASIZE];
while(1)
{
printf("\n~~~~~~~等待连接~~~~~~~\n\n");
sin_size=sizeof(struct sockaddr_in);
if((newfd=accept(sockfd,(struct sockaddr *)&their_addr,&sin_size))==SOCKET_ERROR)
{
perror("accept");
continue;
}
printf("服务器已连接\n");
printf("请输入:");
ZeroMemory(sendbuf,MAXDATASIZE);
gets(sendbuf);
if(send(newfd,sendbuf,sizeof(sendbuf),0)==SOCKET_ERROR){
perror("send");
exit(0);
}
numbytes = recv(newfd, recvbuf, MAXDATASIZE, 0);
recvbuf[numbytes] = '\0';
printf("对方回应: %s",recvbuf);
closesocket(newfd);
}
return 0;
}
//客户端
#include<winsock2.h>
#include<stdio.h>
#include<string.h>
#define PORT 4000
#define MAXDATASIZE 100
int main()
{
WSADATA wsaData;
//初始化Socket库
WSAStartup(MAKEWORD(2,0),&wsaData);
int sockfd,numbytes;
struct hostent *he;
struct sockaddr_in their_addr;
char ServerName[128];
gethostname(ServerName, 128);
he = gethostbyname(ServerName);
sockfd=socket(AF_INET,SOCK_STREAM,0);
their_addr.sin_family=AF_INET;
their_addr.sin_port=htons(PORT);
their_addr.sin_addr= *((struct in_addr *)he->h_addr);
their_addr.sin_addr.s_addr= inet_addr("123.67.189.18");
ZeroMemory(&(their_addr.sin_zero), 8);
char recvbuf[MAXDATASIZE];
char sendbuf[MAXDATASIZE];
while(1)
{
if(connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr))==SOCKET_ERROR)
{
perror("connect");
continue;
}
numbytes=recv(sockfd,recvbuf,MAXDATASIZE,0);
if(numbytes==SOCKET_ERROR)
{
perror("recv");
break;
}
recvbuf[numbytes]='\0';
printf("Received: %s\n",recvbuf);
printf("please write:");
ZeroMemory(sendbuf,sizeof(sendbuf));
gets(sendbuf);
printf("\n");
if(send(sockfd,sendbuf,MAXDATASIZE,0)==SOCKET_ERROR)
{
perror("send");
break;
}
}
closesocket(sockfd);
return 0;
}