code=C/C++][/code]
服务器端
#include "StdAfx.h"
#include "winsock2.h"
#include "commctrl.h"
#include "resource.h"
//#include <windows.h>;
#pragma comment(lib,"ws2_32.lib")   bool Flag = false;
#define BuffSize 1024
SOCKET sock;
//SOCKET AcceptSocket;
HINSTANCE g_hInst;
//void CreateSocket1(HWND hDlg, HWND hWnd);
void CreateSocket1(HWND hDlg, HWND hWnd,RECT rt);
//void SendMessage1();
LRESULT CALLBACK Proc(HWND, UINT, WPARAM, LPARAM);BOOL APIENTRY WinMain(HINSTANCE hInstance,
  HINSTANCE hPrevInstance,
  LPSTR lpCmdLine,
  int nCmdShow)
{
g_hInst = hInstance;
InitCommonControls(); //Registers and initializes the common control window classes
DialogBox(g_hInst, (LPCTSTR)IDD_TALK, NULL, (DLGPROC)Proc);//该宏根据对话框模板资源创建一个模态的对话框
return 0;
}
LRESULT CALLBACK Proc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
RECT rt; //矩形结构
// TCHAR buf[64]={0};
  HWND hWnd;hWnd=GetDlgItem(hDlg, IDC_TALKLIST1);//hDlg:标识含有控制的对话框;IDC_LIST1:指定将被检索的控制标识符。
GetClientRect(hWnd, &rt);
switch(message)
{
case WM_INITDIALOG: //初始化
return true;
case WM_COMMAND: //菜单id  
switch(LOWORD(wParam))
{
case IDC_CreateSocket:  
CreateSocket1(hDlg,hWnd,rt); //建立socket
// RecvProc(hDlg, hWnd, rt);
break;
case IDC_SendMessage:
// RecvProc(hDlg, hWnd, rt);
// SendMessage1();//发送消息
// case IDC_CloseSocket:
// Flag = false;
// closesocket(AcceptSocket);
// closesocket(sock); //关闭socket
// break;
case IDCANCEL:
WSACleanup();
EndDialog(hDlg, LOWORD(wParam));  
return TRUE;
}
}
return 0;
}void CreateSocket1(HWND hDlg, HWND hWnd,RECT rt)  
{
  //socket套接字
  //启动SOCKET库,版本为2.0
int rv,err,iError;
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2, 0);
  //hWnd1=GetDlgItem(hDlg, IDC_TALKLIST1);
err = WSAStartup(wVersionRequested, &wsaData );
if ( 0 != err ) //检查Socket初始化是否成功
{
//DrawText(hWnd,IDC_TALKLIST1,TEXT("SOCKET初始化失败"));  
MessageBox(hDlg,NULL,"SOCKET初始化失败",MB_OK);
return;
}
else
{
  MessageBox(hDlg,NULL,"SOCKET初始化成功",MB_OK);
}
//检查Socket库的版本是否为2.0
if (LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=0)  
{
WSACleanup();
return;  
}
//创建socket
sock = socket(
AF_INET, //internetwork: UDP, TCP, etc
SOCK_STREAM, //SOCK_DGRAM说明是UDP类型
0 ); //protocol
if (INVALID_SOCKET==sock)  
{
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |   
  FORMAT_MESSAGE_FROM_SYSTEM |   
  FORMAT_MESSAGE_IGNORE_INSERTS,   
  NULL,   
  WSAGetLastError(),   
  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),   
  (LPTSTR) &lpMsgBuf,   
  0,   
  NULL
);
MessageBox(hDlg, (LPCTSTR)lpMsgBuf, "Error ", MB_OK | MB_ICONINFORMATION);   
LocalFree(lpMsgBuf);   
//SetDlgItemText(hWnd,IDC_TALKLIST1,TEXT("Socket 创建失败,Exit!"));
MessageBox(hDlg,NULL,"Socket 创建失败,Exit!",MB_OK);
return;
}
//绑定
sockaddr_in sa;   
// char IPAddress[32]; //本地地址
// GetDlgItem(hDlg, IDC_LocalADDR);
// GetWindowText(hWnd1,IPAddress,sizeof(IPAddress));
sa.sin_family=AF_INET;  
sa.sin_port=htons(3068);  
sa.sin_addr.S_un.S_addr =htonl(INADDR_ANY); //Server address can be INADDR_ANY;  
rv=bind(sock, (SOCKADDR *)&sa, sizeof(sa));  
if (INVALID_SOCKET==rv)  
{  
// iError=WSAGetLastError();
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |   
  FORMAT_MESSAGE_FROM_SYSTEM |   
  FORMAT_MESSAGE_IGNORE_INSERTS,   
  NULL,   
  WSAGetLastError(),   
  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),   
  (LPTSTR) &lpMsgBuf,   
  0,   
  NULL
);
MessageBox(hDlg, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION);   
LocalFree(lpMsgBuf);   
MessageBox(hDlg,NULL,"绑定失败",MB_OK);}  
  
//监听
  rv=listen(sock, 2);
  
if( SOCKET_ERROR == rv)  
{  
  
iError=WSAGetLastError();
MessageBox(hDlg, NULL, "没有消息", MB_OK);
}
else
{
  MessageBox(hDlg, NULL, "监听正常", MB_OK);
Flag=true;
}
//}
  
//void RecvProc(HWND hDlg, HWND hWnd, RECT rt)
//{
SOCKET AcceptSocket;
int SendLen;
int RecvLen;
// int iError; //接受字节数
char RecvBuff[BuffSize+1]; //接受缓冲区
HDC hdc;// 存放接入的client的地址信息  sockaddr_in addrClient;   
  int len = sizeof(struct sockaddr_in);  
  AcceptSocket=accept(sock,(struct sockaddr*)&addrClient, &len);
if(INVALID_SOCKET == AcceptSocket)
{
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |   
  FORMAT_MESSAGE_FROM_SYSTEM |   
  FORMAT_MESSAGE_IGNORE_INSERTS,   
  NULL,   
  WSAGetLastError(),   
  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),   
  (LPTSTR) &lpMsgBuf,   
  0,   
  NULL
);
MessageBox(hDlg, (LPCTSTR)lpMsgBuf, "Error ", MB_OK | MB_ICONINFORMATION);   
LocalFree(lpMsgBuf);   
iError = WSAGetLastError();
MessageBox(hDlg,NULL,"接收失败",MB_OK);
}
/* SendLen=GetDlgItemText(hDlg, IDC_EDIT1, RecvBuff, sizeof(RecvBuff));
hdc = GetDC(hWnd);
DrawText(hdc, RecvBuff, SendLen, &rt, DT_WORDBREAK | DT_EDITCONTROL);
ReleaseDC (hWnd, hdc);
rv = send(AcceptSocket, RecvBuff, SendLen, 0);  
if(SOCKET_ERROR == rv)
{
iError = WSAGetLastError();
MessageBox(hDlg, NULL,"发送失败",MB_OK);
}
*/
RecvLen = recv(AcceptSocket, RecvBuff, BuffSize, 0);  
RecvBuff[RecvLen]='\0';
if (RecvLen>0)
{
MessageBox(hDlg, NULL,"执行接收功能",MB_OK);
hdc = GetDC (hWnd);
DrawText(hdc, RecvBuff, lstrlen(RecvBuff), &rt, DT_WORDBREAK | DT_EDITCONTROL);
  ReleaseDC (hWnd, hdc); 
}
else
{
// Flag=false;
MessageBox(hDlg,NULL,"没有收到数据", MB_OK);
}
  SendLen=GetDlgItemText(hDlg, IDC_EDIT1, RecvBuff, sizeof(RecvBuff));
hdc = GetDC(hWnd);
DrawText(hdc, RecvBuff, SendLen, &rt, DT_WORDBREAK | DT_EDITCONTROL);
ReleaseDC (hWnd, hdc);
rv = send(AcceptSocket, RecvBuff, SendLen, 0);  
if(SOCKET_ERROR == rv)
{
iError = WSAGetLastError();
MessageBox(hDlg, NULL,"发送失败",MB_OK);
}
closesocket(AcceptSocket);
closesocket(sock);