服务器:
#include
#include
#include
#define MYPORT 80
#define BACKLOG 5
#define MAXDATASIZE 100
int main()
{
WSADATA wsaData;
//初始化Socket库
WSAStartup( MAKEWORD( 2, 0), &wsaData);
int my_sock,their_sock;
SOCKADDR_IN my_addr, 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(( my_sock = socket( AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR)
{
perror("socket");
return 0;
}
if( bind( my_sock, (SOCKADDR *)&my_addr, sizeof(SOCKADDR)) == SOCKET_ERROR)
{
perror("bind");
return 0;
}
if( listen( my_sock, BACKLOG) == SOCKET_ERROR)
{
perror("listen");
return 0;
}
char recvbuf[MAXDATASIZE],sendbuf[MAXDATASIZE];
int flag = 1;
while(1)
{
if(flag) printf("----------------------等待链接----------------------\n\n");
flag = 0;
int sin_size = sizeof(SOCKADDR_IN);
if(( their_sock = accept( my_sock, (SOCKADDR *)&their_addr, &sin_size)) == SOCKET_ERROR)
{
perror("accept");
continue;
}
printf("\n\n请输入:");
ZeroMemory( sendbuf, MAXDATASIZE);
gets(sendbuf);
if(!flag) printf("\n\n\n--------------------等待对方输入--------------------\n\n");
if( send( their_sock, sendbuf, sizeof(sendbuf), 0) == SOCKET_ERROR)
{
perror("send");
return 0;
}
int numbytes = recv(their_sock, recvbuf, MAXDATASIZE, 0);
recvbuf[numbytes] = '\0';
printf("对方回应: %s",recvbuf);
closesocket(their_sock);
}
return 0;
}
#include
#include
#include
#define PORT 80
#define MAXDATASIZE 100
int main()
{
WSADATA wsaData;
//初始化Socket库
WSAStartup( MAKEWORD( 2, 0), &wsaData);
int sock, numbytes;
HOSTENT *he;
SOCKADDR_IN their_addr;
/*
struct sockaddr_in {
short int sin_family; //Internet地址族
unsigned short int sin_port; // 端口号
struct in_addr sin_addr; //Internet地址
unsigned char sin_zero[8]; // 添0(和struct sockaddr一样大小)
}; */
/*
struct in_addr {
unsigned long s_addr;
};
*/
while(1)
{
//获取主机名
char ServerName[128];
gethostname( ServerName, 128);
he = gethostbyname( ServerName);
their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(PORT);
their_addr.sin_addr = *(( IN_ADDR *)he->h_addr);
their_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //服务器地址 //127.0.0.1
ZeroMemory(&(their_addr.sin_zero), 8);
//建立socket
//AF_UNIX - 只在单机上使用。
// AF_INET - 可以在单机或其他使用DARPA协议(UDP/TCP/IP)的异种机通信。
//SOCK_STREAM - 用来建立面向连接的sockets,可以进行可靠无误的的数据传输
// SOCK_DGRAM - 用来建立没有连接的sockets,不能保证数据传输的可靠性。
sock = socket(AF_INET, SOCK_STREAM, 0);
char recvbuf[MAXDATASIZE], sendbuf[MAXDATASIZE];
printf("-------------------等待服务器发送消息-------------------\n\n\n");
//连接服务器
if(connect(sock, (SOCKADDR *)&their_addr, sizeof(SOCKADDR)) == SOCKET_ERROR)
{
perror("connect");
continue;
}
//接收服务器传来的消息
numbytes = recv(sock, recvbuf, MAXDATASIZE, 0);
if(numbytes == SOCKET_ERROR)
{
perror("recv");
break;
}
recvbuf[numbytes] = '\0';
printf("服务器消息: %s\n", recvbuf);
printf("请输入:");
ZeroMemory(sendbuf, sizeof(sendbuf));
gets(sendbuf);
printf("\n\n\n");
//向服务器发送消息
if(send(sock, sendbuf, MAXDATASIZE, 0) == SOCKET_ERROR)
{
perror("send");
break;
}
//关闭socket
closesocket(sock);
}
return 0;
}