简单的socket程序
2010-01-13 22:18
虽然很简单,
但还是调试了很长时间。
本科时候接触过socket--那个帅帅的刘老师的课,
现在重新再捡起来。
程序中专门建立一个FunThread线程用来接收数据,
实现双向通信也可以连续发送、连续接收。
代码贴上来,如果还能保留VA View那样的颜色区别就好看了,
但是试了好几遍都不行
server:
#include
#include
#define PORT 6000 //服务器端口
#define MSGSIZE 1024 //收发缓冲区的大小
#pragma comment(lib, "ws2_32.lib") //链接静态库
DWORD WINAPI FunThread(LPVOID); //创建一个线程
专门用来接收数据
SOCKET sClient; //连接所用套节字
SOCKET sListen; //监听套接字
SOCKADDR_IN client; //保存客户的地址信息
int iaddrSize = sizeof(SOCKADDR_IN);
int main()
{
WSADATA wsaData;
SOCKADDR_IN local;
char s_Message[MSGSIZE]; //收发缓冲区
WSAStartup(0x0202, &wsaData); //Initialize Windows socket library
sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器监听套节字。
TCP协议
local.sin_family = AF_INET; //AF_INET指明使用TCP/IP协议族
local.sin_port = htons(PORT);//指明连接服务器的端口号
local.sin_addr.s_addr = htonl(INADDR_ANY);//自动获取本机地址
bind(sListen, (struct sockaddr *)&local, sizeof(SOCKADDR_IN));//地址绑定到套接字
listen(sListen, 1);//开始监听
sClient = accept(sListen, (struct sockaddr *)&client, &iaddrSize);//建立连接
printf("Accepte client:%s:%d\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
HANDLE hThread=CreateThread(NULL,0,FunThread,0,0,0);//创建接收线程
CloseHandle(hThread);
while (TRUE)
{
printf("Server Send:");
//从键盘输入
gets(s_Message);
//发送数据
send(sClient, s_Message, strlen(s_Message), 0);
}
return 0;
}
DWORD WINAPI FunThread(LPVOID)
{
char c_Message[MSGSIZE]; //收发缓冲区
int ret; //接收字节的个数
while (TRUE)
{
ret = recv(sClient, c_Message, MSGSIZE, 0);//接收数据
if(ret==SOCKET_ERROR)
{
printf("\nclient is closed!");
sClient = accept(sListen, (struct sockaddr *)&client, &iaddrSize);//重新开始监听
printf("\nAccepte new client:%s:%d", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
memset(c_Message,0,1024);//将原来的client message归零
co
上一篇:信息技术德能勤绩工作总结
下一篇:近三年来思想工作小结(德能勤绩廉)