您的位置:首页 > 理论基础 > 计算机网络

linux下TCP socket编程初步(1)

2012-03-12 20:57 399 查看
 Socket编程:
结构:sockaddr_in

Sin_family 地址家族 AF_INET AF_INET6

Sin_port 16位

Sin_addr s_addr 32位

 

Server:socket,bind,listen,accept

Client:socket,connect

另外,今天刚看到一篇博客中写的比较清楚,可以参考:

http://blog.csdn.net/kikilizhm/article/details/7858405

服务端程序:
//ipserver.cc
#include<iostream>
using namespace std;
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<fcntl.h>
#include<string>
#include<stdlib.h>

int main(int argc,char* argv[])
{
short port=12345;
if(argc>1)
port=atoi(argv[1]);
int ss=socket(AF_INET,SOCK_STREAM,0);
if(ss<0)
return -1;
sockaddr_in si;
si.sin_family=AF_INET;
si.sin_port=htons(port);
si.sin_addr.s_addr=0;//INADDR_ANY 不管哪个IP地址
socklen_t len=sizeof(si);
int r=bind(ss,(sockaddr*)&si,len);
if(r<0)
return -1;
r=listen(ss,20);
if(r<0)
return -1;
sockaddr_in c;
for(;;)
{
len=sizeof(c);
int cs=accept(ss,(sockaddr*)&c,&len);//对方套接地址放第二个参数
if(cs<0)
continue;
char ip[100];//#include<arpa/inet.h>
inet_ntop(AF_INET,&c.sin_addr.s_addr,ip,sizeof(ip));
cout<<	ip<<"到此访问"<<endl;
string msg="your ip:";
msg+=ip;
msg+='\n';
write(cs,msg.c_str(),msg.size());
close(cs);
}
}


 

编译后,执行./a.out 12345

程序在等待,这时在windows下telnet:(客户端)

telnet 10.31.50.149 12345

也可以自己写一客户端程序:

//ipclient.cc
#include<iostream>
using namespace std;
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<fcntl.h>
//#include<string>
#include<stdlib.h>

int main(int argc,char* argv[])
{
if(argc!=3)
{
cout<<*argv<<"ip port"<<endl;
return 0;
}
int s=socket(AF_INET,SOCK_STREAM,0);
if(s<0)
return -1;
sockaddr_in si;
short port=atoi(argv[2]);
char* ip=argv[1];
si.sin_family=AF_INET;
si.sin_port=htons(port);
inet_pton(AF_INET,ip,&si.sin_addr.s_addr);
int r=connect(s,(sockaddr*)&si,sizeof(si));
if(r<0)
return -1;
char msg[200];
int n=read(s,msg,sizeof(msg));
if(n<0)
return -1;
msg
='\0';
cout<<msg<<endl;
close(s);
return 0;
}

分别编译通过:

客户端:

./ipc 127.0.0.1 12345

your ip:127.0.0.1

服务器端:

./ips 12345

127.0.0.1到处访问

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息