client connect to the IP and Port that bind with server
server bind a IP and Port
then client connect the IP and Port
//client
/*if happend error: error C4996: 'inet_addr': Use inet_pton() or InetPton() instead
or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
Slove: Project properties -> Configuration Properties -> C/C++ -> General -> SDL checks -> No
*/
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#define DES_IP "127.0.0.1"
#define DES_PORT 5000
int main()
{
SOCKET sock;
char buf[1024];
SOCKADDR_IN ser_addr;
WSADATA wsaData;
WORD wVersionRequired;
wVersionRequired = MAKEWORD(2, 2);
if (WSAStartup(wVersionRequired, &wsaData)!= 0)
{
printf("init failed %ld\n",WSAGetLastError());
// return 1;
}
//create socket
sock = socket(AF_INET, SOCK_STREAM, 0);
ser_addr.sin_addr.S_un.S_addr = inet_addr(DES_IP); //127.0.0.1
ser_addr.sin_port = htons(DES_PORT); //5000
ser_addr.sin_family = AF_INET;
memset(ser_addr.sin_zero, 0, 8);
//connect server
if (connect(sock, (SOCKADDR *)&ser_addr, sizeof(SOCKADDR_IN)) != 0)
{
int nError = WSAGetLastError();
printf("connect server failed! error:%d\n\n", WSAGetLastError());
system("pause");
return 1;
}
else
{
printf("connected server,send data now.press exit to end.\n\n");
}
//send data
while(!NULL)
{
int SentBytes;
int RecvBytes;
char strRecv[1024] = { 0 };
printf("send:");
scanf("%s",buf);
if (strcmp(buf, "exit") == 0) break;
SentBytes = send(sock, buf, strlen(buf), 0);
if (SentBytes == SOCKET_ERROR)
{
printf("send failed!\n");
break;
}
//receive the data from server
if ((RecvBytes = recv(sock, strRecv, sizeof(strRecv), 0)) != SOCKET_ERROR)
{
strRecv[RecvBytes] = 0;
printf("recive: %s\n", strRecv);
}
else
{
printf("receive failed!%d\n",WSAGetLastError());
}
Sleep(1000);
}
closesocket(sock);
WSACleanup();
return 0;
}
// server
//server for linux
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SERVERPORT 9000
# define MAXDATASIZE 1024
int main()
{
char recBuf[MAXDATASIZE];
char sendBuf[MAXDATASIZE];
int sockfd, new_fd, numbytes;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVERPORT);
server_addr.sin_addr.s_addr = INADDR_ANY;
memset(&client_addr,0,sizeof(struct sockaddr));
//create socket
if ((sockfd = socket ( AF_INET , SOCK_STREAM , 0)) == - 1) {
printf ("socket error\n");
return 1;
}
//bind
if ( bind (sockfd, (struct sockaddr *) & server_addr, sizeof (struct sockaddr))!=0){
printf ("bind failed!");
return 1;
}
else{
printf("server start \n\n");
}
while (1) {
//listen
if(listen(sockfd,6)!=0){
printf("listen error");
return 1;
}
//accept
sin_size = sizeof ( struct sockaddr_in );
if((new_fd=accept(sockfd,(struct sockaddr *)&client_addr,&sin_size))==-1){
printf ( "lient has disconnected!" );
break ;
}
//printf ("server: got connection from %s\n",inet_ntoa(client_addr.sin_addr));
printf ("getting data from client...\n");
int bAvail = 1;
while(bAvail){
if ((numbytes=recv(new_fd,recBuf, MAXDATASIZE, 0) ) == - 1) {
printf( "data receive failed or client has disconnected!\n" );
// bAvail = -1;
break;
}
if(numbytes) {
// recBuf[numbytes] = '/0';
printf ("received: %s\n" ,recBuf);
sleep (1);
}
//send data to client
printf("send:");
scanf("%s",sendBuf);
if(send(new_fd,sendBuf,strlen(sendBuf),0)==-1){
printf ( "send error" );
return -1;
}
sleep (1);
}close(new_fd);
}
close(sockfd);
return 0;
}
参考:
BSD Socket:
http://blog.csdn.net/blueman2012/article/details/6693605