ctcpip编程
❶ 最近开始学习TCP/IP 编程,因为原来c语言学的不是很好,所以想问一下,TCP/IP编程是用什么软件操作的
TCP/IP本身计算机网络通信领域的问题,它本身不是编程。
而你说的编程可能有两种意思,
一、如果实现TCP/IP协议。
二、如何实现具有网络通信功能的应用程序。
第一种情况,一般人是不需要的。
第二种情况,建议阅读与网络协议相关的图书。最重要的是网络“套接字”。它提供的应用程序进行网络通信的一套方法。不过它也不需要直接了解TCP/IP。
而C语言学习呢,不需要学习的非常好,只要清楚知道,函数、变量、结构体,各种选择语句、循环语句,各种表达式即可。
❷ TCP/IP协议和C语言编程有关系吗有什么关系
TCP/IP协议主要用于网络编程,而c语言是一门语言,c语言除了网络可以操作很多,比如硬件,系统,打印,串口等等。
❸ 如何用C语言编写一个简单的聊天室程序
这样:
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <pthread.h>
#define MAXLINE 100;
void *threadsend(void *vargp);
void *threadrecv(void *vargp);
int main()
{
int *clientfdp;
clientfdp = (int *)malloc(sizeof(int));
*clientfdp = socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in serveraddr;
struct hostent *hp;
bzero((char *)&serveraddr,sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(15636);
serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
if(connect(*clientfdp,(struct sockaddr *)&serveraddr,sizeof(serveraddr)) < 0){
printf("connect error ");
exit(1);
}
pthread_t tid1,tid2;
printf("connected ");
while(1){
pthread_create(&tid1,NULL,threadsend,clientfdp);
pthread_create(&tid2,NULL,threadrecv,clientfdp);
}
return EXIT_SUCCESS;
}
void *threadsend(void * vargp)
{
//pthread_t tid2;
int connfd = *((int *)vargp);
int idata;
char temp[100];
while(1){
//printf("me: ");
fgets(temp,100,stdin);
send(connfd,temp,100,0);
printf(" client send OK ");
}
printf("client send ");
return NULL;
}
void *threadrecv(void *vargp)
{
char temp[100];
int connfd = *((int *)vargp);
while(1){
int idata = 0;
idata = recv(connfd,temp,100,0);
if(idata > 0){
printf("server : %s ",temp);
}
}
return NULL;
}
(3)ctcpip编程扩展阅读:
注意事项
linux下编译多线程代码时,shell提示找不到 pthread_create函数,原因是 pthread.h不是linux系统默认加载的库文件,应该使用类似如下gcc命令进行编译:
gcc echoserver.c -lpthread -o echoserver
只要注意 -lpthread参数就可以了。
❹ linux tcp/ip 网络通信编程
/*************************************
文件名:server.c
linux下socket网络编程简例-服务端程序
服务器端口设为0x8888(端口和地址可根据实际情况更改,或者使用参数传入)
服务器地址设为192.168.1.104
作者:kikilizhm#163.com(将#换为@)
*/
#include<stdlib.h>
#include<sys/types.h>
#include<stdio.h>
#include<sys/socket.h>
#include<linux/in.h>
#include<string.h>
intmain()
{
intsfp,nfp;/*定义两个描述符*/
structsockaddr_ins_add,c_add;
intsin_size;
unsignedshortportnum=0x8888;/*服务端使用端口*/
printf("Hello,welcometomyserver! ");
sfp=socket(AF_INET,SOCK_STREAM,0);
if(-1==sfp)
{
printf("socketfail! ");
return-1;
}
printf("socketok! ");
/*填充服务器端口地址信息,以便下面使用此地址和端口监听*/
bzero(&s_add,sizeof(structsockaddr_in));
s_add.sin_family=AF_INET;
s_add.sin_addr.s_addr=htonl(INADDR_ANY);/*这里地址使用全0,即所有*/
s_add.sin_port=htons(portnum);
/*使用bind进行绑定端口*/
if(-1==bind(sfp,(structsockaddr*)(&s_add),sizeof(structsockaddr)))
{
printf("bindfail! ");
return-1;
}
printf("bindok! ");
/*开始监听相应的端口*/
if(-1==listen(sfp,5))
{
printf("listenfail! ");
return-1;
}
printf("listenok ");
while(1)
{
sin_size=sizeof(structsockaddr_in);
/*accept服务端使用函数,调用时即进入阻塞状态,等待用户进行连接,在没有客户端进行连接时,程序停止在此处,
不会看到后面的打印,当有客户端进行连接时,程序马上执行一次,然后再次循环到此处继续等待。
此处accept的第二个参数用于获取客户端的端口和地址信息。
*/
nfp=accept(sfp,(structsockaddr*)(&c_add),&sin_size);
if(-1==nfp)
{
printf("acceptfail! ");
return-1;
}
printf("acceptok! Serverstartgetconnectfrom%#x:%#x ",ntohl(c_add.sin_addr.s_addr),ntohs(c_add.sin_port));
/*这里使用write向客户端发送信息,也可以尝试使用其他函数实现*/
if(-1==write(nfp,"hello,welcometomyserver ",32))
{
printf("writefail! ");
return-1;
}
printf("writeok! ");
close(nfp);
}
close(sfp);
return0;
}
/*************************************
文件名:client.c
linux下socket网络编程简例-客户端程序
服务器端口设为0x8888(端口和地址可根据实际情况更改,或者使用参数传入)
服务器地址设为192.168.1.104
作者:kikilizhm#163.com(将#换为@)
*/
#include<stdlib.h>
#include<sys/types.h>
#include<stdio.h>
#include<sys/socket.h>
#include<linux/in.h>
#include<string.h>
intmain()
{
intcfd;/*文件描述符*/
intrecbytes;
intsin_size;
charbuffer[1024]={0};/*接受缓冲区*/
structsockaddr_ins_add,c_add;/*存储服务端和本端的ip、端口等信息结构体*/
unsignedshortportnum=0x8888;/*服务端使用的通信端口,可以更改,需和服务端相同*/
printf("Hello,welcometoclient! ");
/*建立socket使用因特网,TCP流传输*/
cfd=socket(AF_INET,SOCK_STREAM,0);
if(-1==cfd)
{
printf("socketfail! ");
return-1;
}
printf("socketok! ");
/*构造服务器端的ip和端口信息,具体结构体可以查资料*/
bzero(&s_add,sizeof(structsockaddr_in));
s_add.sin_family=AF_INET;
s_add.sin_addr.s_addr=inet_addr("192.168.1.104");/*ip转换为4字节整形,使用时需要根据服务端ip进行更改*/
s_add.sin_port=htons(portnum);/*这里htons是将short型数据字节序由主机型转换为网络型,其实就是
将2字节数据的前后两个字节倒换,和对应的ntohs效果、实质相同,只不过名字不同。htonl和ntohl是
操作的4字节整形。将0x12345678变为0x78563412,名字不同,内容两两相同,一般情况下网络为大端,
PPC的cpu为大端,x86的cpu为小端,arm的可以配置大小端,需要保证接收时字节序正确。
*/
printf("s_addr=%#x,port:%#x ",s_add.sin_addr.s_addr,s_add.sin_port);/*这里打印出的是小端
和我们平时看到的是相反的。*/
/*客户端连接服务器,参数依次为socket文件描述符,地址信息,地址结构大小*/
if(-1==connect(cfd,(structsockaddr*)(&s_add),sizeof(structsockaddr)))
{
printf("connectfail! ");
return-1;
}
printf("connectok! ");
/*连接成功,从服务端接收字符*/
if(-1==(recbytes=read(cfd,buffer,1024)))
{
printf("readdatafail! ");
return-1;
}
printf("readok REC: ");
buffer[recbytes]='