基于tcp socket双向传输 多线程编程解决思路

基于tcp socket双向传输 多线程编程
如题,手上有一个单向的socket,老师说要双向的,可是我连最简单的单向socket也不懂,更别说双向了。不知道怎么把单向用线程改成双向。多线程编程完全不知道。大神可以推荐多线程编程的书,或者指点一下怎么改成双向的,有代码的给我当然不会介意~~~~~~~
服务器
#include <winsock.h>
#include <process.h>
#pragma comment(lib,"ws2_32")
#include <stdio.h>
int main(int argc,char *[])
{
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2,2);
if(WSAStartup(sockVersion,&wsaData)!=0)
   return 0;

SOCKET sServer = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sServer==INVALID_SOCKET)
{
   printf("socket error\n");
   return 0;
}

sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(1129);
sin.sin_addr.S_un.S_addr = INADDR_ANY;

//bind套接字
if(bind(sServer,(LPSOCKADDR)&sin,sizeof(sin)) == SOCKET_ERROR)
{
   printf("bind error!\n");
   return 0;
}

//listen模式
if(listen(sServer,5) == SOCKET_ERROR)
{
   printf("listen error!\n");
   closesocket(sServer);
   return 0;
}

//循环接受连接请求
sockaddr_in remoteAddr;
SOCKET sClient;
int nAddrLen=sizeof(SOCKADDR_IN);
char revData[255];
while(1)
{
   sClient = accept (sServer,(SOCKADDR*)&remoteAddr,&nAddrLen);
   if(sClient==INVALID_SOCKET)
   {
    printf("accept error\n");
    continue;
   }
   printf("接受来自%s的连接.\n",inet_ntoa(remoteAddr.sin_addr));
   while(true)
   {
    int ret = recv(sClient,revData,255,0);
    if(ret==0||(ret==SOCKET_ERROR&&WSAGetLastError()==WSAECONNRESET))
    {
     printf("%s关闭连接\n",inet_ntoa(remoteAddr.sin_addr));
     closesocket(sClient);
     break;
    }
    else
    {
     revData[ret]='\0';
     printf("%s",revData);
    }
   }

}
closesocket(sServer);
WSACleanup();
return 0;
}

客户端
#include <winsock.h>
#pragma comment(lib,"ws2_32")
#include <stdio.h>
#define PORT 1129
#define ADDRESS "127.0.0.1"
int main()
{//加载winsock库
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2,2);
if(WSAStartup(sockVersion,&wsaData)!=0)
   return 0;
//创建套接字
SOCKET sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sClient==INVALID_SOCKET)
{
   printf("socket error\n");
   return 0;
}
//socket中装入远程地址信息
SOCKADDR_IN remote;
remote.sin_family = AF_INET;
remote.sin_port = htons(1129);
remote.sin_addr.S_un.S_addr = inet_addr(ADDRESS);

if(connect(sClient,(SOCKADDR *)&remote,sizeof(SOCKADDR))==SOCKET_ERROR)
{
   printf("connect error\n");
   closesocket(sClient);
   return 0;
}

while(true)
{
   char SendData[255];
   int i,ch;
   for( i = 0; (i < 254) && ((ch = getchar()) != EOF) && (ch!='\n'); i++)
   SendData[i] = (char)ch;
   SendData[i] = '\n';
   SendData[i+1] = '\0'; 
   send(sClient,SendData,i+2,0);
}
closesocket(sClient);
WSACleanup();
return 0;
}
------解决思路----------------------
客户端:发送
服务器:接收,发送
客户端:接收,发送
服务器:接收,发送
。。。