C语言如何实现Socket编程

buyong 2003-07-14 01:30:32
现在欧要做一个用C语言实现客户端和服务器端Socket通信的程序,要求可以在Windows和Unix上运行,现在求教例子程序。(必须是C语言)
...全文
679 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
gunsrose 2003-07-15
  • 打赏
  • 举报
回复
up
fixopen 2003-07-15
  • 打赏
  • 举报
回复
Windows 下的 Winsock 对于 BSD 的 Socket 有了很多扩展,但是不利用这些扩展也是可以进行socket编程的。

不过Winsock有两个函数必须使用:WSAStartup, WSACleanup。分别在开始和结束时使用。
在unix下,简单的去掉就行了。

因为不用WSAAsyncSelect和其他的WSA*类的扩展函数,必须把select搞清楚,很好的同步函数呀。

good luck
magic007 2003-07-14
  • 打赏
  • 举报
回复
SORRY,我说成C++实现的了。不过C也类似,进行某种程度的抽象
zteliubin 2003-07-14
  • 打赏
  • 举报
回复
socket编程的书推荐 Richard Stevens《UNIX网络编程:第1卷》
magic007 2003-07-14
  • 打赏
  • 举报
回复
既然是TCP/IP协议,不管是在WINDOWS下还是在UNIX下,都是相通的
应该先熟悉TCP/IP,然后试着在UNIX和WINDOWS平台上编程,找出其不同点和共同点。
编程时把平台相关部分抽象为接口,如果将来要移到UNIX上,重新实现这个接口即可了
shishiXP 2003-07-14
  • 打赏
  • 举报
回复
编得不好,仅作参考

int accefd, sockfd;
sockaddr_in seraddr;
sockaddr_in cliaddr;
int len_cli;

if ( (sockfd = socket (AF_INET, SOCK_STREAM, 0) ) == -1)
{
printf("socket error\n");
out();
}
bzero(&seraddr, sizeof (seraddr) );
seraddr.sin_family = AF_INET;
seraddr.sin_port = htons (MYPORT);
seraddr.sin_addr.s_addr = htonl (INADDR_ANY);
if( bind (sockfd, (sockaddr *)&seraddr, sizeof (seraddr)) == -1)
{
printf ("bind error\n");
out ();
}
if( listen (sockfd,5) == -1)
{
printf ("listen error\n");
out ();
}
len_cli = sizeof(cliaddr);
if ( (accefd = accept (sockfd, (sockaddr *)&cliaddr, &len_cli) ) == -1)
{
printf("accept error\n");
close(sockfd);
exit(-1);
}
close ( accefd );
close ( sockfd );
jy2004 2003-07-14
  • 打赏
  • 举报
回复
找本tcp/ip
zteliubin 2003-07-14
  • 打赏
  • 举报
回复
可以的,除了WSAStartup()
不要用其他WSA函数。
WSAStartup()可以用定义开关#ifdef WIN32.
wonita 2003-07-14
  • 打赏
  • 举报
回复
找本介绍WINDOWS的SOCKET的书看看
buyong 2003-07-14
  • 打赏
  • 举报
回复
或者我改为求教2个程序例子,一个在windows上实现,另一个在Unix上实现。不过那Unix和Window之间的Socket通信怎么做呢?
buyong 2003-07-14
  • 打赏
  • 举报
回复
偶也不太懂,偶老板说用C做,将来可以放在Unix上,就是不要用windows socket.怎么办?
lw549 2003-07-14
  • 打赏
  • 举报
回复
Winsock是windows专用的,怎么能移植到unix上呢?
antijpn 2003-07-14
  • 打赏
  • 举报
回复
Unix里面用的和Windows里面的差别好像大了一点吧?
Unix里面用的是Berkeley Socket,而Windows里面用的是Winsock

Winsock扩展了很多专用函数,例如WSAAsyncSelect,WSAStartup,WSACleanup等等,使用规则和流程也不是很一样。要实现移植恐怕有点困难了
cwanter 2003-07-14
  • 打赏
  • 举报
回复
倒,你听谁说可以跨平台?windows要调用WSAStartup,unix不用。
liuhaibao 2003-07-14
  • 打赏
  • 举报
回复
推荐一本书自己去看,tcp\ip祥解第二卷,上面讲的很详细

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧