c网络编程教程
Ⅰ 在windows下用C语言如何实现socket网络编程,需要用到哪些头文件或者库
需要用到的头文件包含:
#include <winsock2.h>
#include <windows.h>
与linux环境下socket编程相比,windows环境多了一个步骤:启动或者初始化winsock库
Winsock,一种标准API,一种网络编程接口,用于两个或多个应用程序(或进程)之间通过网络进行数据通信。具有两个版本:
Winsock 1:
Windows CE平台支持。
头文件:WinSock.h
库:wsock32.lib
Winsock 2:
部分平台如Windows CE貌似不支持。通过前缀WSA可以区别于Winsock 1版本。个别函数如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都属于Winsock 1.1规范的函数;
头文件:WinSock2.h
库:ws2_32.lib
mswsock.h用于编程扩展,使用时必须链接mswsock.dll
(1)c网络编程教程扩展阅读
winsock库的加载与卸载:
加载:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
加载成功,返回值为0。
WORD wVersionRequested:加载的winsock版本,使用宏MAKEWORD(x, y),x表示高字节,y表示低字节。然而使用时MAKEWORD(2, 2)。高字节与低字节相同~~
LPWSADATA lpWSAData:WSADATA结构的指针,传入参数后,系统帮助我们填充版本信息。有兴趣的可以看看结构体内容,不过基本用不着。
卸载:int WSACleanup(void);比起加载,卸载的函数真是轻松愉快。
Ⅱ 怎样用C语言做socket网络编程
mfc只是对socket进行了一些封装,大部分人做网络编程都是用的原始的socket,比如如下接口都可以在c下进行调用x0dx0a 1.socket() x0dx0a 2.bind() x0dx0a 3.connect() x0dx0a 4.listen() x0dx0a 5.accept() x0dx0a 6.send() 和recv() x0dx0a 7.sendto() 和recvfrom() x0dx0a 8.close() 和shutdown() x0dx0a 9.getpeername() x0dx0a 10.gethostname() x0dx0a这些接口是在Winsock2.h中定义的不是在mfc中定义的,你只需要包含Winsock2.h头文件和Ws2_32.lib库就可以了。
Ⅲ C语言网络编程问题
//UDP服务代码// Mole Name: Receiver.c
//
// Description:
// This sample receives UDP datagrams by binding to the specified
// interface and port number and then blocking on a recvfrom()
// call
//
// Compile:
// cl -o Receiver Receiver.c ws2_32.lib
//
// Command line options:
// sender [-p:int] [-i:IP][-n:x] [-b:x]
// -p:int Local port
// -i:IP Local IP address to listen on
// -n:x Number of times to send message
// -b:x Size of buffer to send
//
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>#define DEFAULT_PORT 5150
#define DEFAULT_COUNT 25
#define DEFAULT_BUFFER_LENGTH 4096int iPort = DEFAULT_PORT; // Port to receive on
DWORD dwCount = DEFAULT_COUNT, // Number of messages to read
dwLength = DEFAULT_BUFFER_LENGTH; // Length of receiving buffer
BOOL bInterface = FALSE; // Use an interface other than
// default
char szInterface[32]; // Interface to read datagrams from//
// Function: usage:
//
// Description:
// Print usage information and exit
//
void usage()
{
printf("usage: sender [-p:int] [-i:IP][-n:x] [-b:x]\n\n");
printf(" -p:int Local port\n");
printf(" -i:IP Local IP address to listen on\n");
printf(" -n:x Number of times to send message\n");
printf(" -b:x Size of buffer to send\n\n");
ExitProcess(1);
}//
// Function: ValidateArgs
//
// Description:
// Parse the command line arguments, and set some global flags to
// indicate what actions to perform
//
void ValidateArgs(int argc, char **argv)
{
int i; for(i = 1; i < argc; i++)
{
if ((argv[i][0] == '-') || (argv[i][0] == '/'))
{
switch (tolower(argv[i][1]))
{
case 'p': // Local port
if (strlen(argv[i]) > 3)
iPort = atoi(&argv[i][3]);
break;
case 'n': // Number of times to receive message
if (strlen(argv[i]) > 3)
dwCount = atol(&argv[i][3]);
break;
case 'b': // Buffer size
if (strlen(argv[i]) > 3)
dwLength = atol(&argv[i][3]);
break;
case 'i': // Interface to receive datagrams on
if (strlen(argv[i]) > 3)
{
bInterface = TRUE;
strcpy(szInterface, &argv[i][3]);
}
break;
default:
usage();
break;
}
}
}
}//
// Function: main
//
// Description:
// Main thread of execution. Initialize Winsock, parse the command
// line arguments, create a socket, bind it to a local interface
// and port, and then read datagrams.
//
int main(int argc, char **argv)
{
WSADATA wsd;
SOCKET s;
char *recvbuf = NULL;
int ret,
i;
DWORD dwSenderSize;
SOCKADDR_IN sender,
local; // Parse arguments and load Winsock
//
ValidateArgs(argc, argv); if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
printf("WSAStartup failed!\n");
return 1;
}
// Create the socket and bind it to a local interface and port
//
s = socket(AF_INET, SOCK_DGRAM, 0);
if (s == INVALID_SOCKET)
{
printf("socket() failed; %d\n", WSAGetLastError());
return 1;
}
local.sin_family = AF_INET;
local.sin_port = htons((short)iPort);
if (bInterface)
local.sin_addr.s_addr = inet_addr(szInterface);
else
local.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(s, (SOCKADDR *)&local, sizeof(local)) == SOCKET_ERROR)
{
printf("bind() failed: %d\n", WSAGetLastError());
return 1;
}
// Allocate the receive buffer
//
recvbuf = GlobalAlloc(GMEM_FIXED, dwLength);
if (!recvbuf)
{
printf("GlobalAlloc() failed: %d\n", GetLastError());
return 1;
}
// Read the datagrams
//
for(i = 0; i < dwCount; i++)
{
dwSenderSize = sizeof(sender);
ret = recvfrom(s, recvbuf, dwLength, 0,
(SOCKADDR *)&sender, &dwSenderSize);
if (ret == SOCKET_ERROR)
{
printf("recvfrom() failed; %d\n", WSAGetLastError());
break;
}
else if (ret == 0)
break;
else
{
recvbuf[ret] = '\0';
printf("[%s] sent me: '%s'\n",
inet_ntoa(sender.sin_addr), recvbuf);
}
}
closesocket(s); GlobalFree(recvbuf);
WSACleanup();
return 0;
}
Ⅳ C语言基础网络编程求助 如何实现多线程
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
void*thread(void*);
int client[5],i;
main()
{
int serverSocket= socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in server_addr;
struct sockaddr_in clientAddr;
int addr_len = sizeof(clientAddr);
//线程
pthread_t id;
pthread_attr_t attr;
pthread_attr_init(&attr);////////////////////////////////////////////////
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
//创建地址
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family =AF_INET;
server_addr.sin_port = htons(5555);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
//绑定
bind(serverSocket,(struct sockaddr *)&server_addr,sizeof(server_addr));
listen(serverSocket,5);
for(i=0;i<5;i++)
{
client[i] = accept(serverSocket,(struct sockaddr *)&clientAddr,(socklen_t*)&addr_len);
pthread_create(&id,&attr,thread,(void *)&client[i]);/////////////////////////////////
pthread_join(id,NULL);
}
close(serverSocket);/////////////////////////
return 0;
}
void* thread(void* argv)
{
char buffer[200];
int a=i;
int s_c = *((int*)argv);///////////////////
while(1)
{
int n = recv(s_c,buffer,sizeof(buffer),0);
if(n > 0)
printf("客户端发过来的 : %s\n",buffer);
else
return;
}
close(s_c);
}
Ⅳ linux下C语言网络编程 如何入门
1.
可以.
说实话,我不太明白你意思...如果说GCC
能不能编译CPP程序..我告诉你可以..GCC
G++都是链接..它们根据后缀来确定是什么语言..
如果说,网络程序能不能用C++写..那就太多了..ACE就是明显的一例..BOOST:ASIO也是一例..
2
我建议你用GCC
实际上GDB没什么大用..你后面就懂了..一般用在看CORE文件上...如GCC的好处是,,你可以对编译过程有个了解..真的不难..常用的总共不超过5个参数......ECLIPSE,不建议用,你初学,精力全浪费到那上面了
Ⅵ 从事C/C++服务器开发,网络编程方向有什么好的书籍推荐呢
读书使人进步,即使工作了,也要经常读一些经典的书籍来充实自己,作为一名一线开发者,下面将自己觉得不错的书籍进行推荐。
1.TCP/IP详解(卷1)
由机械工业出版社出版,一个系列总共三卷,个人感觉卷一足矣。里面基本涵盖了网络的方散氏方面面,是我们补充基础知识的良药,这里建议大家直接读英文版,遇到不认识的单词可以借助翻译工具还是很方便的,中文版读起来总是会有那么的一点点小别扭。
2.TCP/IP网络编程
人民邮电出版,作者是韩国人,写的还是很不错的,可以作为一本很好的入门书籍,文中涉及到Windows和Linux两大平台网络编程基础知识,并以Linux为主,结尾是以HTTP服务器实例向我们介绍了网络编程的方方面面,豆瓣评分8.5,不失为一本经典的网络编程书籍。
下面是一本本人亲自整理的带目录的PDF书籍,如对这岩明本书比较敢兴趣,欢迎私信+关注,我会在第一时间发送你。
3.Unix网络编程
APUE、UNP基本上是Linux开发必读的“圣经”了,Unix网络编程,简称UNP,Linux环境下网络编程必读经典书籍。豆瓣评分飚至9.2,内容简介已经用到了传世之作这四个字,经典之处不必多说。内容也是非常的详尽,可以重点看看工作中常用到的部分,当做案头书,常来翻翻也是不错的,这里重点推荐下。
4.Linux多线程服务端编程
电子工业出版社出版,他们家关于IT类的书籍还是很不错的,作者是大牛陈硕,以其开源的Muo网粗掘告络库为基础,讲解了Linux多线程服务端编程的知识,基本属于进阶性质了,阅读本书,不仅需要你有足够的C++功底,还有掌握一些C++11的知识,多线程、网络相关知识也是必备技能点。
基本上,看完这几本书,再加上工作中的实战,基本可以慢慢独当一面了。
最后,欢迎大家关注我的头条号,一个程序员的奋斗史,带你走进真正的程序员视角,分析IT知识。
Ⅶ c程序如何在windows下进行网络编程
和编译(OR IDE)环境有关,比如vc就可以直接使用所有c的库函数.
ftp使用TCP,那么就用流式套接字(SOCK_STREAM)的相关函数,如果作为客户端,调用顺序如下:
1 socket()
2 connect()
3 send/recv
4 closesocket()
如果是服务器端,调用顺序如下:
1 socket()
2 bind()
3 listen()
4 accept()
5 send/recv()
6 closesocket()
vc下有库ws2_32.lib可供使用
程序只能在传输层进行开发(既TCP/UDP),不可以在应用层进行操作,即没有这样的库,调用它一个函数就实现了ftp的客户端或服务器端。如果需要可以参照网上的ftp代码。
使用如上库很简单:
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
...
详见msdn